应该使用什么方法并行多次执行一项任务
本文关键字:执行 任务 一项 什么 并行 方法 | 更新日期: 2023-09-27 18:28:24
我有这个简单的任务
void DoWork(string job)
该shoud bu在Azure Worker Role上的parallel中执行了多次。我有这些选择:
对DoWork 的多异步调用
while(true) {DoWorkDelegate.BeginInvoke(...);}
由我自己分配许多threds
while(true) {Thread t = new Thread( DoWork); t.Start();}
线程池
就使用而言,推荐的方法是什么?
这个例子可能被过度简化了。在示例中显示,循环中的每个迭代都会产生一个新线程。虽然我完全同意@DanielMann使用TPL而不是线程,添加
while (true) {
Task.Factory.StartNew(() => DoWork());
}
仍然会引发很多线程。确保在像这样的线程旋转之外还有一个工作要做的测试
while (true) {
job = FetchJobFromQueue();
if( job != null ){
Task.Factory.StartNew(() => DoWork(job));
}
else {
Thread.Sleep(1000);
}
}
记下睡眠时间,以避免将处理器固定在空循环上。
有一点相关的注意事项,请参阅MSDN的这篇文章,了解如何正确处理while(true)循环的退出条件。