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



我有一组要初始化的模块,其中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将变成一个空壳。是否有任何方法可以实现在单独的线程上初始化每个模块,并且主线程将等待直到它们全部初始化?希望我已经说清楚了。谢谢

您可以并行执行foreach

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

最新更新