1
我注意到任務可以通過拋出OperationCanceledException
來取消自己。通常情況下,人們可以通過用戶友好的原因在後來成爲異常消息的OperationCanceledException
constructor中。但是,在任務場景中它看起來並不如此。異常使得任務被取消,但最終被翻譯成TaskCanceledException
,原始消息被替換爲通用消息。使用OperationCanceledException自行取消任務
在這個例子中是否有一個簡潔的方式來說明取消原因?我看着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();
}
}