我写应该执行的基础上,先行任务的成功或失败的任务序列。但是,其中一个任务意外执行,即使其先行任务未执行。ContinueWith任务意外执行
的步骤是,我输入一些数据。如果成功,我开始保存,然后计算。如果导入失败,我想处理异常。
这里是我可以复制它的简单代码:
var importTask = new Task(() => {
Console.WriteLine("import");
// Force an exception
throw new Exception("FAIL");
});
var saveTask = importTask.ContinueWith(task => {
Console.WriteLine("save");
}, TaskContinuationOptions.NotOnFaulted);
var calcTask = saveTask.ContinueWith(task => {
Console.WriteLine("calc");
});
var errorTask = importTask.ContinueWith(task => {
Console.WriteLine("error");
Console.WriteLine(task.Exception.InnerException.Message);
}, TaskContinuationOptions.OnlyOnFaulted);
importTask.Start();
从这个输出是:
进口
钙
错误
失败
我认为应该calcTask后saveTask执行。但是即使saveTask没有,它也会执行。有趣的是,在calcTask中,task.IsCanceled == true。
为什么计算任务的执行?