我已经搜索过,但无法在任何地方找到明确的确认...如果一个任务有多个延续(不是链式连续),那么这些延续是否相互平行?
我想运行task1,然后将task2-task3-task4并行运行,最后运行task5。以下示例。任务2,3和4肯定会彼此异步运行吗?
虽然我们正在努力,但欢迎任何改进模式的建议。似乎有几种不同的方法来完成这种组合。感谢
public Task MyWorkflowAsync() {
Task task1 = Task.Factory.StartNew( () => DoTask1() );
var tarray = new Task[] {
task1.ContinueWith( task => DoTask2() ),
task1.ContinueWith( task => DoTask3() ),
task1.ContinueWith( task => DoTask4() )
};
return Task.Factory.ContinueWhenAll( tarray, completedTasks => DoTask5() );
}
答案 0 :(得分:3)
不,延迟在默认调度程序的LIFO排序中执行。如果你想让它们全部并行运行,你应该这样做:
public Task MyWorkflowAsync()
{
var tasks = new List<Task>();
var task1 = Task.Factory.StartNew(DoTask1);
tasks.Add(task1.ContinueWith(task => tasks.Add(Task.Factory.StartNew(DoTask2))));
tasks.Add(task1.ContinueWith(task => tasks.Add(Task.Factory.StartNew(DoTask3))));
tasks.Add(task1.ContinueWith(task => tasks.Add(Task.Factory.StartNew(DoTask4))));
return Task.Factory.ContinueWhenAll(tasks.ToArray(), completedTasks => DoTask5());
}