1

私は2つのAsyncMethodsを持つAsyncControllerを持っています。1 つは GetMessages と呼ばれ、もう 1 つは Check です。おそらく両方が this.AsyncManager.OutstandingOperations.Increment(); を呼び出すため、一方の呼び出しが他方をブロックしているようです。同じ AsyncManager を共有していますか? それを行う正しい方法は何ですか?お互いに干渉しないようにするには、2 つの AsyncController が必要ですか?

更新: 両方のメソッドのコードは、ここに投稿されたコードに似ています: Async operation completes, but result is not send to browser

実際、これは同じコントローラーで、Check/CheckCompleted を追加しただけです。場合によっては、「GetMessages」が返されるように「チェック」をトリガーする必要があります

Update2: 両方の方法で 60 秒の waittimout があります。1つを5つに減らしました。これは役に立ちますが、単なるハックだと思います。

4

1 に答える 1

1

彼らはブロックすべきではありません。観察しているブロックは、両方のメソッドが Session を使用し、Session がスレッド セーフではないため、同じセッションから 2 つの並列要求 (AJAX 要求など) がある場合、ASP.NET がアクセスをブロックすることが原因である可能性があります。

したがって、次の属性でそれらを装飾することにより、これらのアクションのすべてのセッションを無効にしてみてください。

[SessionState(SessionStateBehavior.Disabled)]
于 2011-07-08T18:14:46.750 に答える