【发布时间】:2021-02-02 13:04:27
【问题描述】:
我正在尝试等待多个任务,我预计其中一些可能会被取消。我使用this 问题作为灵感来源,让WhenAll 相应地处理取消的任务...
但是,如果没有任何任务被取消,这反过来也会引发异常!
var source = new CancellationTokenSource();
var task1 = Task.Delay(100, source.Token);
source.Cancel();
var task2 = Task.Delay(300);
await Task.WhenAll(task1, task2).ContinueWith(_ => { }, TaskContinuationOptions.OnlyOnCanceled);
在上面的例子中,如果source.Cancel() 没有被执行,那么最终的await 将会抛出一个异常。我可以通过从最后一行中删除 ContinueWith 来解决这个问题,但是如果任务被取消,WhenAll 将失败并出现同样的错误。
当其中一些任务可能(但不是必须)被取消时,等待任务列表的正确做法是什么?
【问题讨论】:
标签: c# async-await cancellation