C# 如何制作两个foreach“;工作“;同时/并行/异步
我有一个关于c#编程的问题。 我得到了这段代码,我想用它来并行或异步运行。 我得到了一个包含类别和数据列表的故事列表。我想处理每个平行列表,因为它们彼此独立。 如何实现foreach storelist和foreach数据同时迭代C# 如何制作两个foreach“;工作“;同时/并行/异步,c#,.net,C#,.net,我有一个关于c#编程的问题。 我得到了这段代码,我想用它来并行或异步运行。 我得到了一个包含类别和数据列表的故事列表。我想处理每个平行列表,因为它们彼此独立。 如何实现foreach storelist和foreach数据同时迭代 public void workwithitems(List<StoreModel> StoreList) { foreach (var item in StoreList) {
public void workwithitems(List<StoreModel> StoreList)
{
foreach (var item in StoreList)
{
foreach (var entry in item.categories) {
Items.Add(new item
{
Name = item.Name
});
}
foreach (var item in item.Data) {
Items.Add(new item
{
Name = item.Name
});
}
}
}
public void workwithitems(列表存储列表)
{
foreach(StoreList中的var项)
{
foreach(项目类别中的var条目){
项目。添加(新项目)
{
Name=项目名称
});
}
foreach(item.Data中的var项){
项目。添加(新项目)
{
Name=项目名称
});
}
}
}
您可以使用任务
System.Threading.Tasks.TaskFactory.StartNew(() => { foreach number 1...});
System.Threading.Tasks.TaskFactory.StartNew(() => { foreach number 2...});
将它们放入方法中,根据TPL,您可以执行以下操作:
Parallel.Invoke(() => MethodWithForeach(), () => MethodWithOtherForeach());
请注意,
List
不是线程安全的容器。我建议为两者实现一个单独的thread
。将项目添加到列表中非常快。通过对它进行并行化,您希望得到什么?您可以使用Parallel.ForEach()对它进行并行化,但如果同时从两个线程调用Add,您将遇到一个问题。您将不得不调用它,但随后将失去并行化没有理由对此进行并行化,因为处理将以项结束。添加,我认为无论如何都应该进行同步-因此本质上,您将获得相同的顺序执行,而并行化开销将加重此操作的负担。