Ale*_*lex 6 .net c# task-parallel-library
根据文档 在任务被取消时Task.Run(Action, CancellationToken)抛出TaskCanceledException.
什么时候Task.Run(Action, CancellationToken)扔TaskCanceledException?目前尚不清楚抛出此异常必须满足哪些条件.
似乎有些混乱(文档可能会产生误导).
提示Task.Run方法永远不会抛出TaskCanceledException(至少在当前实现中).与"动作参数为空"和"与cancelToken关联的CancellationTokenSource被处置"时不同ArgumentNullException并且ObjectDisposedException同步抛出.分别.
Task.Run然而返回一个Task可使用的被取消CancellationToken参数(更上消除在这里)和等待它与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");
}
Run Code Online (Sandbox Code Playgroud)
如果文档有两部分可能的例外情况,可能会更清楚:
ArgumentNullException和ObjectDisposedException)TaskCanceledException)| 归档时间: |
|
| 查看次数: |
3463 次 |
| 最近记录: |