【发布时间】:2022-01-31 16:25:52
【问题描述】:
我是任务并行库的新手,下面是我的简单应用程序:
static void Main(string[] args)
{
CancellationTokenSource cts = new CancellationTokenSource();
var task = Task.Delay(2000, cts.Token);
cts.Cancel();
var exceptionProp = task.Exception; // <------why the task's Exception is null
Console.ReadLine();
}
据我对Task.Delay(int millisecondsDelay, CancellationToken cancellationToken)的理解是,当cancellationToken被取消时,会抛出一个TaskCanceledException。
但我不明白为什么exceptionProp(任务的AggregateException 属性)在我的应用程序中为空,因为我明确取消了令牌,TaskCanceledException 应该在task.Exception 中?
【问题讨论】:
-
任务不会设置
Exception,除非它被等待或在执行过程中发生实际异常。您应该检查Status属性以了解它是否被取消 -
docs.microsoft.com/en-us/dotnet/standard/parallel-programming/…: "注意这个异常表示取消成功,而不是故障情况。因此,任务的
Exception属性返回null"。
标签: c# .net task-parallel-library