6

我有一个 Azure Worker Role,它具有三种类型的进程:

  • 从数据库读取并写入工作输入队列(Task1)的 C# 线程
  • 从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 任务创建选项?
  • 有没有更好的方法来实现我在这里尝试做的事情?
4

1 回答 1

6

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

它本身并不是一个特定的长度。如果您要生成大量任务,LongRunning 不适合它们。如果您生成的一两个任务相对于应用程序的生命周期会持续相当长的时间,那么 LongRunning 是需要考虑的事情。

于 2012-11-29T19:03:48.527 回答