我有一组要初始化的模块,其中 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());
关于multithreading - 如何在 C# 4.0 中实现任务延续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26159484/