【发布时间】:2014-11-27 08:42:56
【问题描述】:
我有一组要初始化的模块,其中 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 变为空壳。有什么方法可以实现在单独线程上初始化的每个模块,并且主线程将等到它们全部初始化?希望我已经说清楚了。 谢谢。
【问题讨论】:
标签: multithreading c#-4.0 task-parallel-library task continuations