应该使用什么方法并行多次执行一项任务

本文关键字:执行 任务 一项 什么 并行 方法 | 更新日期: 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)循环的退出条件。