【发布时间】:2016-11-12 21:26:16
【问题描述】:
我尝试了很多方法,但未能在 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();
输出是:
取消:
这意味着取消异常被捕获但异常本身为空。我的问题是如何在这里获得取消例外?
谢谢
德里克
【问题讨论】:
-
好吧,如果一个任务被取消了,那是因为你取消了它。如果任务出错,可能有任何原因,然后您需要异常才能获得线索。为什么取消任务时需要异常?顺便说一句,如果有任何异常,那么您只能期待 OperationCanceledException。保留例外没有任何意义;o)
-
为什么不能只使用
t.IsCanceled测试?这似乎足够了。
标签: c# task continuewith