我有这个简单的任务
void DoWork(string job)
在 Azure工作者角色中,并行多次。 我有这些选择:
对DoWork的多个异步调用
while(true) {DoWorkDelegate.BeginInvoke(...);}
自己分配许多人
while(true) {Thread t = new Thread( DoWork);
t.Start();}
线程池
在利用方面,推荐的方法是什么?
答案 0 :(得分:2)
此示例可能过度简化。在示例中显示了循环中每次迭代的新线程。虽然我完全同意@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 article以正确处理退出条件的(true)循环。