【问题标题】:Return something before Parallel.Foreach finishes executing在 Parallel.Foreach 完成执行之前返回一些东西
【发布时间】:2014-12-23 16:51:43
【问题描述】:
public bool SampleMethod()
{
    Parallel.ForEach(List, Val =>
    {
        // execute some time consuming code
    });
    return true;
}

我注意到Parallel.Foreach 正在阻塞线程,直到 foreach 循环中的所有任务都完成。

对于上面的方法,我想立即返回 true,即使 Parallel.foreach 块中的操作仍在执行(它们应该仍然在后台运行,直到所有操作都完成)。

这可能吗?

【问题讨论】:

  • 使用任务 API 在后台执行,并行 API 不用于此目的。您可以启动任务,而不是等待它们完成并在启动所有任务后返回 true

标签: c# parallel-processing task parallel.foreach


【解决方案1】:

您可以在另一个线程中执行并行操作:

public bool SampleMethod()
{
     Task.Run(() => {
                       Parallel.ForEach(List, Val =>
                       {
                          // execute some time consuming code
                       });
                    });
    return true;
}

这将在一个单独的线程中启动任务并返回 true 而无需等待它完成。

【讨论】:

  • 独立线程是后台线程继续工作,即使进程返回并退出,还是前台线程,需要主进程线程不退出
猜你喜欢
  • 1970-01-01
  • 2020-01-28
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 2018-02-08
相关资源
最近更新 更多