我对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
(。