Во-первых, только asyn c работа может быть отменена, и только если этот asyn c работа поддерживает отмену. Команда syn c, такая как Thread.Sleep
, не может быть отменена, поэтому то, что вы пытаетесь сделать здесь, в принципе невозможно начать.
Task.Run
- это не волшебная палочка c, которая делает syn c внезапно асин c. Все, что вы делаете с этим, запускает код syn c в новом потоке. Он все еще должен работать до завершения, и этот поток будет связан до тех пор, пока это не произойдет.
Предполагая, что вы на самом деле имеете дело с асинхронным c кодом, и , которые Код asyn c поддерживает отмену (как правило, принимает ли он CancellationToken
параметр), тогда способ сделать то, что вы хотите, - это пользовательский CancellationTokenSource
. Вы создаете экземпляр этого и передаете его как маркер отмены каждому методу asyn c. Затем вы ожидаете каждую операцию, и если одна из них завершается неудачей, вы отправляете отмену в CTS, что затем приводит к отмене любых операций, использующих этот токен отмены.