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被排除。为什么不是一个完全有效的用例,只有当所有的前件都以特定的状态结束时,才能让任务运行?