gpt4 book ai didi

c# - 帮助使用任务并行库

转载 作者:行者123 更新时间:2023-11-30 15:09:01 25 4
gpt4 key购买 nike

我正在尝试使用任务并行库为一系列项目安排函数调用。

以下不起作用

List<Task> tasks = new List<Task>();

foreach(var someValue in aCollection)
{
var t = Task.Factory.StartNew(() => DoSomeWork(someValue));
tasks.Add(t);
}

Task.WaitAll(tasks.ToArray());

但下面的工作

Task.WaitAll(aCollection.Select(a => Task.Factory.StartNew(() => DoSomeWork(a))).ToArray());

对于第一种方法,它执行一次然后停止。我不确定它是否覆盖了引用或其他东西。有人可以吗?解释一下?

还有一种方法可以将一些序列号传递给任务,该序列号可用于识别首先安排的任务。我的意思是我想等待所有任务完成,然后根据集合中的顺序对结果进行排序。

最佳答案

我不知道这是否导致执行停止,但也许是因为你是 closing over the loop variable这里:

DoSomeWork(someValue));

您需要创建一个局部变量并为其分配 someValue,然后使用该局部变量,如我的链接问题中所述,如下所示:

foreach(var someValue in aCollection)
{
var localCopy = someValue;

var t = Task.Factory.StartNew(() => DoSomeWork(localCopy));
tasks.Add(t);
}

同样,我不知道这是否是您的死锁问题的症结所在,但这是一个很可能会导致问题的问题。

关于c# - 帮助使用任务并行库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4927989/

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