c# - 任务取消

标签 c# .net task-parallel-library

我想等到两个任务都完成了,但还没有进入完成状态。等待应该在什么时候结束 任务都处于取消状态。

激活cancellationToken后taskA和taskB会被取消,这条线还会继续吗?

Task.WaitAll(taskA, taskB); 

提前致谢。

最佳答案

是的,WaitAll 将在两个任务都处于终止状态时退出,无论该终止状态是什么。

但是,如果任何任务出错或取消,它将通过抛出 AggregateException 来完成。如果所有任务都成功完成,它只会正常完成(即无一异常(exception))。如果您只是想继续前进,则需要捕获该异常。您可以查看 AggregateExceptionInnerExceptions 来区分取消和错误 - 或者查看 taskAtaskB当然是他们自己。

来自documentation ,在异常(exception)部分:

AggregateException At least one of the Task instances was canceled -or- an exception was thrown during the execution of at least one of the Task instances. If a task was canceled, the AggregateException contains an OperationCanceledException in its InnerExceptions collection.

请注意,如果您使用的是 .NET 4.5 和异步方法,则可能需要使用 Task.WhenAll相反,它异步执行此等待 - 它返回一个任务,该任务在原始任务完成时完成。

关于c# - 任务取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16382238/

相关文章:

c# - 使用 C++/CLI 的任务并行库 Task.ContinueWith

c# - C# 中名为/exactly do 的值后面的单个字符是什么? (例如1.00m)

c# - 在 C# 中忽略异常

c# - 带有字符串参数的 MongoDb c# Driver typed Builder

.net - 以编程方式将 G729 音频转换为 WAV PCM

c# - 在 .NET 4.0 和 C# 4.0 中使用基于任务的异步模式 (TAP)

multithreading - 从 WaitHandle.Wait 构造任务

c# - UWP 继承 self 的用户控件

c# - .NET 核心 MVC View 模型

c# - 遍历 RichTextBox 使特定单词加粗