【发布时间】:2016-02-05 09:15:00
【问题描述】:
我注意到任务可以通过抛出OperationCanceledException 自行取消。通常,可以在OperationCanceledExceptionconstructor 中传递用户友好的原因,该原因后来成为异常消息。但是,在任务场景中看起来不是这样。该异常使任务被取消,但最终被翻译成TaskCanceledException,原始消息被替换为通用消息。
在这个例子中,有没有一种简洁的方式来说明取消原因?我查看了CancellationTokenSource,但也没有看到任何选项。
class Program
{
static async Task MyAsyncMethod()
{
await Task.Delay(TimeSpan.FromSeconds(1));
throw new OperationCanceledException("My lost cancellation reason");
}
static void Main(string[] args)
{
var task = MyAsyncMethod();
try
{
task.Wait();
}
catch (AggregateException ecxeptions)
{
var exception = ecxeptions.InnerException;
Console.WriteLine(exception.GetType()); //TaskCanceledException
Console.WriteLine(exception.Message); //A task was canceled.
Console.WriteLine(task.Status); //Canceled
Console.WriteLine(task.Exception == null); //true
}
Console.Read();
}
}
【问题讨论】:
标签: c# async-await task cancellation