根据documentation,当任务已取消时,Task.Run(Action, CancellationToken)
会引发TaskCanceledException
。Task.Run(Action, CancellationToken)
何时确切地抛出TaskCanceledException
?尚不清楚必须满足什么条件才能引发此异常。
最佳答案
似乎有些困惑(并且文档可能会引起误解)。
调用Task.Run
方法将从不抛出TaskCanceledException
(至少对于当前实现而言)。与ArgumentNullException
和ObjectDisposedException
不同,后者在“操作参数为null”和“与cancelestToken关联的CancellationTokenSource被处置时”同步抛出。分别。
但是Task.Run
返回的Task
可以使用CancellationToken
参数取消(更多关于here中的取消操作),然后用await task
,task.Wait()
,task.Result
等在其上等待,将抛出TaskCanceledException
(可能包裹在AggregateException
中)
Task<int> task = null;
try
{
task = Task.Run(() => 5, new CancellationToken(true));
}
catch (TaskCanceledException)
{
Console.WriteLine("Unreachable code");
}
try
{
int result = await task;
}
catch (TaskCanceledException)
{
Console.WriteLine("Awaiting a canceled task");
}
如果文档有两节可能的异常(exception)情况,可能会更清楚:
ArgumentNullException
和ObjectDisposedException
)TaskCanceledException
)来抛出关于c# - Task.Run(Action,CancellationToken)何时会引发TaskCanceledException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27196451/