我有这个简单的任务
void DoWork(string job)
这应该在 Azure Worker Role 上并行执行多次。 我有以下选择:
对 DoWork 的多个异步调用
while(true) {DoWorkDelegate.BeginInvoke(...);}
自己分配多个线程
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);
}
}
注意 sleep 时间,以免处理器陷入空循环。
关于一些相关的说明,请查看此 MSDN article正确处理退出条件的 while(true) 循环。
关于c# - 应该使用什么方法来并行执行一项任务多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18358019/