【问题标题】:Running two parallel.foreach() together一起运行两个 parallel.foreach()
【发布时间】:2012-11-13 08:00:38
【问题描述】:

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

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

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

如果我想同时运行这两个列表,我应该创建另一个线程作为它们的父线程还是其他方式?我分别获取这两个列表,因此不能将它们组合起来。而且我在它们两个内部都运行无限循环。

【问题讨论】:

  • 创建两个任务然后Task.WaitAll
  • Action<object> action = (object obj) => { //put the parallel.foreach here }; 和第二个parallel.foreach 的另一个操作,然后运行任务并调用Task.WaitAll rt??

标签: c# .net multithreading backgroundworker task-parallel-library


【解决方案1】:

您可以使用任务在不同的线程上运行两个循环。使用普通的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);

【讨论】:

    【解决方案2】:

    为两个“foreach”循环创建两个单独的线程。

    【讨论】:

    • 如果可以使用 TPL,显式创建线程通常不是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多