我寫應該執行的基礎上,先行任務的成功或失敗的任務序列。但是,其中一個任務意外執行,即使其先行任務未執行。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。
爲什麼計算任務的執行?