c# - 应该使用什么方法来并行执行一项任务多次?

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

我有这个简单的任务

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/

相关文章:

C# - 匿名委托(delegate)

django - 使用 Devops CI/CD 将 Django Web App 部署到 Azure 应用服务

rest - 在没有用户委托(delegate)的情况下如何使用OAuth? -- 微软图形API

html - 如何将生成的 SAS token 从 NodeJS Azure Function 传递到 HTML?

c# - 如何关闭在 WPF 中用作子菜单的弹出窗口

c# - 如果在 linq 查询中值为 null,如何分配空字符串?

c# - ToString() 格式不起作用

c# - 处理任务和并行循环中的异常。 (线程 - TPL)

java - Log4j 线程上的 Tomcat 内存泄漏问题

java - 一个生产者,多个消费者