gpt4 book ai didi

c# - 子任务与 WaitAll

转载 作者:太空狗 更新时间:2023-10-30 01:01:35 26 4
gpt4 key购买 nike

当我可以让父任务等待它创建的所有任务时,我不确定创建子任务有什么好处。我运行以下代码,它在两种情况下产生了相同的结果。

public static void Main(string[] args)
{
RunWithChildren();
RunWithWait();
}


private static void RunWithChildren()
{
Task<Int32[]> parent = Task.Run(() =>
{
var results = new Int32[3];
new Task(r => results[0] = 0, TaskContinuationOptions.AttachedToParent).Start();
new Task(r => results[1] = 1, TaskContinuationOptions.AttachedToParent).Start();
new Task(r => results[2] = 2, TaskContinuationOptions.AttachedToParent).Start();
return results;
});

var finalTask = parent.ContinueWith(parentTask =>
{
foreach (int i in parentTask.Result)
Console.WriteLine(i);
});

finalTask.Wait();
}


private static void RunWithWait()
{
Task<Int32[]> parent = Task.Run(() =>
{
var results = new Int32[3];
Task t1 = Task.Run(() => results[0] = 0);
Task t2 = Task.Run(() => results[1] = 1);
Task t3 = Task.Run(() => results[2] = 2);

Task.WaitAll(t1, t2, t3);
return results;
});

var finalTask = parent.ContinueWith(parentTask =>
{
foreach (int i in parentTask.Result)
Console.WriteLine(i);
});

finalTask.Wait();
}

最佳答案

AttachedToParent 为您提供了一种不同的方式来构建您的代码。如果子 Task 可以在父 Task 的代码中的不同位置开始,使用 AttachedToParent 意味着您不必担心收集所有子 Task 都放入一个集合中。

在实践中,我认为 Task.WaitAll() 更清晰并且收集 Task 实际上不是问题,所以我几乎从不使用 AttachedToParent

关于c# - 子任务与 WaitAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38273889/

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