如何在task.continuewith中捕获取消异常

本文关键字:获取 取消 异常 continuewith task | 更新日期: 2023-09-27 18:17:49

我尝试了很多方法,但未能捕获task.ContinueWith中的取消异常。这里有什么问题吗?

 CancellationTokenSource tokenSource = new CancellationTokenSource();
 Task task = new Task( ()=> { Thread.Sleep(1000); Console.WriteLine("in task!"); }, tokenSource.Token);
 task.Start();
 tokenSource.Cancel();
 task.ContinueWith(t =>
 {
      if(t.IsCanceled)
      {
           AggregateException e = t.Exception; 
           if(e == null) // is true
                Console.WriteLine("Cancelled: ");
      }
 });
 Console.Read();

输出为:

取消:

表示捕获了取消异常,但异常本身为空。我的问题是如何在这里获得取消异常?

感谢德里克

如何在task.continuewith中捕获取消异常

取消CancellationToken时不会自动抛出取消异常,如果您自己不抛出异常,任务将被取消,但不会抛出异常,这就是为什么任务异常属性为空


为了抛出异常,你应该在任务操作中使用ThrowIfCancellationRequested方法。

更多信息请点击这里