Red*_*dth 38 c# parallel-processing task pfx task-parallel-library
我有一些简单的代码作为repro:
var taskTest = Task.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(5000);
}).ContinueWith((Task t) =>
{
Console.WriteLine("ERR");
}, TaskContinuationOptions.OnlyOnFaulted);
try
{
Task.WaitAll(taskTest);
}
catch (AggregateException ex)
{
foreach (var e in ex.InnerExceptions)
Console.WriteLine(e.Message + Environment.NewLine + e.StackTrace);
}
Run Code Online (Sandbox Code Playgroud)
但是,我在try catch块中抛出一个意外的TaskCanceledException(它在AggregateException InnerExceptions对象中)."任务被取消了".
为什么我得到这个例外?任务的Continuation永远不会触发,它没有生成任何异常,但在等待时我仍然得到聚合异常....
我希望有人能解释一下这对我有多大意义:)
Jon*_*eet 55
你不是等待一个任务有一个OnlyOnFaulted延续-你就等着在这延续(由返回ContinueWith).延续永远不会触发,因为原始任务正常返回,所以它的行为就像被取消一样.
我感觉合理.
我怀疑你想创建任务,添加延续,但然后等待原始任务:
var taskTest = Task.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(5000);
});
taskTest.ContinueWith((Task t) =>
{
Console.WriteLine("ERR");
}, TaskContinuationOptions.OnlyOnFaulted);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6989 次 |
| 最近记录: |