gpt4 book ai didi

.net - 任务的延续是否彼此异步运行?

转载 作者:行者123 更新时间:2023-12-02 15:49:53 25 4
gpt4 key购买 nike

我已经搜索过,但在任何地方都找不到明确的确认...如果一个任务有多个延续(不是链式延续),这些延续是否彼此并行运行?

我想运行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() );
}

最佳答案

不,默认调度程序按 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());
}

关于.net - 任务的延续是否彼此异步运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com