6

次の 3 種類のプロセスを持つ Azure Worker ロールがあります。

  • データベースから読み取り、 worker-input-queue に書き込む C# スレッド(Task1)
  • worker-input-queueから読み取る Java スレッドが機能し、 worker-output-queue に書き込む
  • worker-output-queueから読み取り、データベースに書き込む C# スレッド(タスク 2)

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 は適切ではありません。アプリケーションの存続期間に比べてかなり長い間存続する 1 つまたは 2 つのタスクを生成している場合は、LongRunning を検討する必要があります。

于 2012-11-29T19:03:48.527 に答える