gpt4 book ai didi

.net - 如何将 CancellationToken 与 Tasks.WaitAll() 一起使用

转载 作者:行者123 更新时间:2023-12-04 20:02:45 25 4
gpt4 key购买 nike

我想知道如何使用 Task.WaitAll采用 CancellationToken 的重载作为论据,例如https://msdn.microsoft.com/en-us/library/dd321573%28v=vs.110%29.aspx

文档说 CancellationToken参数是“等待任务完成时要观察的 CancellationToken”。

由于Task.WaitAll是一个阻塞操作,你怎么可能在那个操作期间“观察”它?此外,它说“cancellationToken 参数用于取消等待操作。如果它被取消,则 Wait 返回 false。”但它还在其他地方说 OperationCanceledException CancellationToken 时抛出被取消,意思是Task.WaitAll不返回 truefalse .

我要么遗漏了一些非常简单的东西,要么文档有问题。无论哪种方式,我都非常困惑。我的最终目标是能够等待多个任务完成或优雅地取消它们(通过正确使用 CancellationToken ),如果它们没有在一定时间内完成。

这与我的帖子有关here ,但是这一次,我正在编写异步代码并且可以观察取消标记。

最佳答案

Since Task.WaitAll is a blocking operation, how could you possibly "observe" it during that operation?



你不是观察它的人;这是 Task.WaitAll方法。

Furthermore, it says "The cancellationToken argument is used to cancel the wait operation. If it is canceled, the Wait returns false." but then it also says elsewhere that a OperationCanceledException is thrown when the CancellationToken is cancelled, meaning Task.WaitAll doesn't return true or false.



这似乎是文档中的错误。如果在任务完成或等待被取消之前指定的超时已过,则返回 false。

Who cancels it?



通常,一些代码在另一个线程上运行,因为当前线程已经忙于等待任务完成。或者您可以调用 CancellationTokenSource.CancelAfter指定取消 token 的超时时间。

关于.net - 如何将 CancellationToken 与 Tasks.WaitAll() 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28193302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com