我创建并启动了许多任务。其中一项任务可能会引发异常。如果发生这种情况,我需要停止所有任务。
现在我只看到这样做的唯一方法是将 CancellationTokenSource 传递给每个任务并在 catch 块中调用 Cancel() 。
TPL 是否以更通用的方式支持所需的功能?
就像是:
Action<Task> onExceptionAction = t => cancellationTokenSource.Cancel();
var task = Task.WhenAnyThrows<MyException>(tasks, onExceptionAction);
如果没有抛出异常,则认为任务已完成(或取消)