2010-11-29 20 views
0

私は、ASP.NET MVCでCometを実装しています。私はサーバーで非同期要求を保持するためにタイマーを使用しました。非同期要求は、1分後にタイマーが経過すると完了し、(404エラーを回避するために)クライアントに応答を送信してから、Async Controllerに再接続します。なぜ非同期アクションが完了するまで同期アクションが実行されませんでしたか?

は、私はまた、非同期要求が保持している間に、いくつかの同期アクションを実行したいのですが、問題がある:

  • 非同期アクションが実行され、タイマーを使用することによって保持された場合には、同期アクションが呼び出されませんでした非同期アクション(Comet long-live request)が完了するまで

Firefox 3.6で何度もテストを行いましたが、結果は常に同じです。それはとても奇妙です。なぜなのかご存知ですか?

私は、サブ質問があります。

  • 非同期リクエストを保持するためにタイマー(経過いくつかの分後に応答)またはスレッド(数時間寝スレッド後の応答)を使用して、彗星を実装するために、それは良いですか?
+0

私にお金を見せてください... ...ソースコードです。 –

+0

私はあなたのためのいくつかのソースを表示します – UmbalaAZ

答えて

0

私の問題の答えが見つかりました。
非同期アクション保留中にがあるため、セッション要求ブロックメカニックが原因で、同期アクションが実行されなかった理由は、Ajaxで同時リクエストを使用してもすべてのリクエストが1つずつ処理されるように非同期呼び出し。そして、解決策は、ロングライブ要求を保持したいコントローラ上のセッションを無効にすることです。 https://blogs.msdn.com/b/rickandy/archive/2009/12/17/session-less-mvc-controller.aspx
2番目は、タイマーとスレッドのスリープを使用して、ロングライブリクエストを実行するときと違いはありません.Asp.netスレッドプールは基本的に新しいスレッドを作成して経過時間を追跡し、タイマーに戻るイベント。それは新しいスレッドがタイマーイベントを追跡するために生まれたので、スレッドプールの要求を処理するスレッドの数を減らします。

関連する問題