CancelToken 未在 Task.WaitAll 中取消



我对Tas.WaitAll有问题。

var t = new List<Task>() {
Task.Run(() => {
while (! this.cancToken.Token.IsCancellationRequested) { // Here Cancellation Request is always false :(
Thread.Sleep(100);
};
}, this.cancToken.Token )
};
// this.cancToken is CancellationTokenSource
var token = this.cancToken.Token;
await Task.Run(() => Task.WaitAll(t.ToArray(), 1000, token));

为什么 Task.WaitAll 不取消 CancelToken? 谢谢

您需要在this.cancToken上调用Cancel(假设它是CancellationTokenSource(,因此它将取消令牌:

await Task.Run(() => Task.WaitAll(t.ToArray(), 1000, token)); 
this.cancToken.Cancel();

Task.WaitAll接受在等待任务完成时要观察的取消令牌作为参数,如果取消,则会抛出OperationCanceledException。令牌本身也没有Cancel方法(传递给Task.WaitAll(。

最新更新