同时运行两个Parallel.ForEach()函数

4

我有一个后台工作者,它会为列表项调用并行线程。

 doWork()
    {
    Parallel.foreach(list1, a=>
    {
       while(true)
       {
             //do some operations
       }
    });

    Parallel.foreach(list2, b=>
    {
        while(true)
        {
            //do some operations
        } 
    });
    }

如果我想同时运行这两个列表,是否应该创建另一个线程作为它们的父线程或者其他方式?由于我分别获取这两个列表,所以合并它们不是一个选项。并且我在它们两个内部都运行了无限循环。

5
创建两个任务,然后使用 Task.WaitAll 等待它们完成。 - L.B
Action<object> action = (object obj) => { //在这里放置parallel.foreach }; 还有另一个用于第二个 parallel.foreach 的操作,然后运行任务并调用 Task.WaitAll 对吧? - varun257
2个回答

5

您可以使用任务在不同的线程上运行这两个循环。请使用普通的foreach循环。

var t1 = Task.Factory.StartNew(() => 
{
    foreach(var a in list1)
    {
        //do some operations
    }
});

var t2 = Task.Factory.StartNew(() => 
{
    foreach(var a in list1)
    {
        //do some operations
    }
});

// This will block the thread until both tasks have completed
Task.WaitAll(t1, t2);

0
创建两个单独的线程来处理两个“foreach”循环。

2
如果可以使用TPL,显式创建线程通常不是一个好主意。 - svick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接