如何在c#4.0中实现任务延续

时间:2014-10-02 11:05:13

标签: multithreading c#-4.0 task-parallel-library task continuations

我有一组要初始化的模块,其中3个模块需要很长时间,而其他模块需要很少的时间来初始化。目前,如果所有这些都在同一个线程上,则需要花费大量时间,例如

foreach (var m in modules)
{
     var md = m;
     md.Initialise();
}

所以我正在尝试像

这样的东西
foreach (var m in modules)
{
    Task.Factory.StartNew(()=>{
                                      var md = m;
                                      md.Initialise();
                              }, TaskCreationOptions.Longrunning);

}

也尝试过:

Parallel.ForEach(modules, m => m.Initialize());

这些都不起作用,因为它不会等待所有模块初始化。 我需要在UI线程可以继续之前初始化所有模块,否则UI将在第一个模块初始化后非常快速地启动,并且由于其他模块仍然未初始化,UI变为空shell。有没有办法实现在单独的线程上初始化的每个模块,主线程将等到它们全部初始化?希望我已经清楚了。 感谢。

1 个答案:

答案 0 :(得分:0)

您可以并行执行foreach

Parallel.ForEach(modules, m => m.Initialize());