0

状況: これを行う必要がある大規模な Azure IIS7 アプリケーション:

  1. リクエストを受け取る
  2. 分離された非同期処理のためにリクエスト ペイロードをキューに配置する
  3. クライアントへの接続を維持する
  4. 非同期プロセスが完了したという通知を待ちます
  5. クライアントに応答する

これらは長時間実行されるプロセスになることに注意してください (30 秒から 5 分)。

ここで Monitor.Wait(...) を使用し、非同期プロセスから同じ Web アプリケーションへのコールバックを待って、Monitor.Wait() を呼び出したオブジェクトで Monitor.Pulse(...) を呼び出すと、これは急いでスレッド飢餓を効果的に作成しますか?

もしそうなら、これはどのように軽減できますか?コールバックを待つためにここで採用するより良いパターンはありますか? たとえば、Response オブジェクトをスレッド セーフなディクショナリに配置し、何らかの方法で譲歩して、コールバック コードで Response をロックし、クライアントへの応答を続行できるでしょうか? もしそうなら、どのように?

また、非同期プロセスが終了し、コールバックが呼び出されず、Monitor.Pulse() が起動されない場合はどうなるでしょうか。私たちのスレッドは今ハングしていますか?

4

1 に答える 1

1

要件を考慮して、AsyncPage / AsyncControllerを確認することをお勧めします (ASP.NET WebForms を使用するか、ASP.NET MVC を使用するかによって異なります)。これらにより、I/O スレッドをブロックすることなく、IIS で長時間実行されるタスクを実行できます。

于 2012-09-19T08:00:38.420 に答える