C# 为什么';TPL支持状态过滤多任务连续性吗?

C# 为什么';TPL支持状态过滤多任务连续性吗?,c#,.net,task-parallel-library,C#,.net,Task Parallel Library,TPL有许多TaskContinuationOptions值,用于控制任务在什么情况下执行。例如,TaskContinuationOptions.notinconceled会在父任务被取消时阻止任务运行 但是,这些任务状态筛选器都不适用于多任务连续性。你不能这样做: TaskFactory f = new TaskFactory(); Task t1 = new Task (() => Thread.Sleep (5000)); Task t2 = new Task (() => T

TPL有许多
TaskContinuationOptions
值,用于控制任务在什么情况下执行。例如,
TaskContinuationOptions.notinconceled
会在父任务被取消时阻止任务运行

但是,这些任务状态筛选器都不适用于多任务连续性。你不能这样做:

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);
您最终会得到一个错误,该错误表示,
“为多个任务的延续排除特定的延续类型是无效的。”

我不明白的是为什么这个条件会被从API中排除。为什么希望任务只在所有先行项都以特定状态结束时运行不是一个完全有效的用例?

“…只在所有先行项都以特定状态结束时运行…”

注意你说的“全部”,我不是MS,但我敢打赌这与另一个完整的
任务继续选项
枚举有关,包括
all
Any
OnlyOne
AllButOne
等等


此外,Eric Lippert总是回答这样的问题:“添加一个“简单”的功能既昂贵又耗时。更重要的是,这比正确掌握基本知识并让用户实现其余的功能更为重要。

continuewhalll
意味着“在所有任务成功完成后运行continuence”“。指定
NotOn*
only*
与该定义相反或多余。请参阅的备注部分