我是线程编程的新手。我必须在并行和后台运行一些任务(以便主 UI 执行线程保持对用户操作的响应),并等待每一项任务完成,然后再继续进一步执行。
就像是:
foreach(MyTask t in myTasks)
{
t.DoSomethinginBackground(); // There could be n number of task, to save
// processing time I wish to run each of them
// in parallel
}
// Wait till all tasks complete doing something parallel in background
Console.Write("All tasks Completed. Now we can do further processing");
我知道可以通过多种方法来实现这一目标。但我正在寻找在 .Net 4.0 (C#) 中实现的最佳解决方案。
对我来说,这似乎是你想要的Parallel.ForEach
Parallel.ForEach(myTasks, t => t.DoSomethingInBackground());
Console.Write("All tasks Completed. Now we can do further processing");
您还可以在一个循环中执行多个任务
List<string> results = new List<string>(myTasks.Count);
Parallel.ForEach(myTasks, t =>
{
string result = t.DoSomethingInBackground();
lock (results)
{ // lock the list to avoid race conditions
results.Add(result);
}
});
为了让主 UI 线程保持响应,您将需要使用BackgroundWorker并订阅其DoWork and RunWorkerCompleted事件,然后调用
worker.RunWorkerAsync();
worker.RunWorkerAsync(argument); // argument is an object
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)