应该使用什么方法并行执行多个任务?

时间:2013-08-21 12:55:12

标签: c# multithreading azure asynchronous azure-worker-roles

我有这个简单的任务

void DoWork(string job)

Azure工作者角色中,并行多次。 我有这些选择:

  • 对DoWork的多个异步调用

    while(true) {DoWorkDelegate.BeginInvoke(...);}
    
  • 自己分配许多人

    while(true) {Thread t = new Thread( DoWork);
                 t.Start();}
    
  • 线程池

在利用方面,推荐的方法是什么?

1 个答案:

答案 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)循环。