C# 如何制作两个foreach“;工作“;同时/并行/异步

C# 如何制作两个foreach“;工作“;同时/并行/异步,c#,.net,C#,.net,我有一个关于c#编程的问题。 我得到了这段代码,我想用它来并行或异步运行。 我得到了一个包含类别和数据列表的故事列表。我想处理每个平行列表,因为它们彼此独立。 如何实现foreach storelist和foreach数据同时迭代 public void workwithitems(List<StoreModel> StoreList) { foreach (var item in StoreList) {

我有一个关于c#编程的问题。 我得到了这段代码,我想用它来并行或异步运行。 我得到了一个包含类别和数据列表的故事列表。我想处理每个平行列表,因为它们彼此独立。 如何实现foreach storelist和foreach数据同时迭代

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,您将遇到一个问题。您将不得不调用它,但随后将失去并行化没有理由对此进行并行化,因为处理将以
项结束。添加
,我认为无论如何都应该进行同步-因此本质上,您将获得相同的顺序执行,而并行化开销将加重此操作的负担。