TPL有多個TaskContinuationOptions
值,用於控制任務在什麼情況下執行。例如,TaskContinuationOptions.NotOnCanceled
可防止任務在其父項被取消時運行。爲什麼TPL不支持狀態過濾的多任務延續?
但是,這些任務狀態過濾器都不適用於多任務延續。你不能這樣做:
TaskFactory f = new TaskFactory();
Task t1 = new Task (() => Thread.Sleep (5000));
Task t2 = new Task (() => Thread.Sleep (4000));
Task t3 = f.ContinueWhenAll (new Task[] { t1, t2 },
(tasks) => { ... },
TaskContinuationOptions.OnlyOnRanToCompletion);
你最終得到一個錯誤,指出,"It is invalid to exclude specific continuation kinds for continuations off of multiple tasks."
我不明白的是爲什麼這種情況會從API被排除。爲什麼不是一個完全有效的用例,只有當所有的前件都以特定的狀態結束時,才能讓任務運行?