我有一组要初始化的模块,其中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。有没有办法实现在单独的线程上初始化的每个模块,主线程将等到它们全部初始化?希望我已经清楚了。 感谢。
答案 0 :(得分:0)
您可以并行执行foreach
:
Parallel.ForEach(modules, m => m.Initialize());