ror*_*.ap 5 .net asynchronous cancellation async-await
我想知道如何使用作为参数的Task.WaitAll重载CancellationToken,例如https://msdn.microsoft.com/en-us/library/dd321573%28v=vs.110%29.aspx
文档说这个CancellationToken参数是"在等待任务完成时要观察的取消行为".
由于Task.WaitAll是阻塞操作,你怎么可能在操作期间"观察"它?此外,它说"cancellationToken参数用于取消等待操作.如果取消,则Wait返回false." 但随后它也在其他地方说,OperationCanceledException当CancellationToken取消时抛出a ,意味着Task.WaitAll不返回true 或 false.
我要么缺少一些非常简单的东西,要么就是文档出了问题.无论哪种方式,我都很困惑.我的最终目标是能够等待多个任务完成或者CancellationToken如果他们在一段时间内没有完成则优雅地(通过正确使用)取消它们.
这与我在这里的帖子有关,但这一次,我正在编写异步代码并且可以观察取消令牌.
由于 Task.WaitAll 是一个阻塞操作,您怎么可能在该操作期间“观察”它呢?
你不是观察它的人;你是观察它的人。这就是Task.WaitAll方法的作用。
此外,它还说“cancelToken 参数用于取消等待操作。如果取消,则 Wait 返回 false”。但它还在其他地方说,取消 CancellationToken 时会引发 OperationCanceledException,这意味着 Task.WaitAll 不会返回 true 或 false。
文档中似乎有一个错误。如果在任务完成或等待取消之前指定的超时已过,则返回 false。
谁取消它?
通常,某些代码在另一个线程上运行,因为当前线程已经忙于等待任务完成。或者您可以调用CancellationTokenSource.CancelAfter指定超时,之后令牌将被取消。
| 归档时间: |
|
| 查看次数: |
2027 次 |
| 最近记录: |