【问题标题】:When should I use LongRunning Task Creation option?我什么时候应该使用 LongRunning 任务创建选项?
【发布时间】:2012-11-29 18:14:57
【问题描述】:

我有一个包含三种类型进程的 Azure 辅助角色:

  • 从数据库读取并写入worker-input-queue的C#线程(Task1)
  • worker-input-queue 读取的 Java 线程确实工作并写入 worker-output-queue
  • worker-output-queue读取并写入数据库的C#线程(Task2)

Task1 和 Task2 无限期运行,如果它们各自的队列为空则休眠。

我的代码如下所示:

SpawnJavaProcesses();  
Task.Factory.StartNew(Task1);  
Task.Factory.StartNew(Task2);  
while(true)  
{  
    //do some trivial sporadic work  
    Thread.Sleep(60*1000);  
}  

我的问题:

  • 我应该在启动 Task1 和 Task2 时使用 LongRunning 任务创建选项吗?
  • 有没有更好的方法来实现我在这里尝试做的事情?

【问题讨论】:

  • 虽然这适用于我的本地多核机器,但我发现上传到单核 Azure 角色时,只有主线程和 Java 进程获得执行时间,而 Task1 和 Task2 没有.这是否与单核系统上的任务使用有关?

标签: c# .net azure task-parallel-library


【解决方案1】:

如果您有几个长时间运行的线程,最好使用 LongRunning 选项。通过选择此选项,您将在线程池之外的线程中运行。这也是 explained by Stephen Toub(来自 Parallel Extensions 团队):

它本身并不是一个特定的长度。如果你产生了很多 任务,LongRunning 不适合他们。如果你正在生成 一两个任务相对于 你的应用程序的生命周期,那么 LongRunning 是值得的 考虑一下。

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多