1

コントローラーメソッドで非同期の結果を待つにはどうすればよいでしょうか? 実装するのは簡単なように思えますが、これまでのところ、クリーンでエレガントな良い例は見つかりませんでした.

これが問題です。私は2つのコントローラーメソッドを持っています。メソッド A とメソッド B。メソッド A は、TaskFactory を介して実行時間の長いプロセスを開始し、プロセスの終了時に ContinueWith を使用してキャッシュされた値を更新します。A と B の間にはいくつかの中間ステップがあります。メソッド B に到達したら、キャッシュ内の値を確認する必要があります。キャッシュ内の値がまだ更新されていない場合は、x 秒待機し、値が更新されているかどうかを定期的に確認する必要があります。

クライアントが結果をポーリングする必要がないように、これらすべてをコントローラーで処理することをお勧めします (そして、ポーリングを処理するためにコントローラーを書き直す必要があります)。しかし、タイムアウトが期限切れになるまでブロックしないコントローラーメソッド内にポーリングを実装する方法を見つけることができませんでした(スレッドプールの枯渇が心配です)。ここで使用できるクリーンな実装がない可能性があります。そして、世論調査が正しい、または唯一の答えである場合、私はそれを受け入れるしかありません。

4

2 に答える 2

2

HTTP is a stateless protocol. You can't implement such polling on the server without blocking. You have 2 possibilities:

  • Polling on the client - have the client hammer your server at regular intervals with AJAX requests
  • Use push and have the server notify the client(s) when some task completes - checkout SignalR
于 2012-08-01T16:31:09.747 に答える
0

mvc 4 が非同期コントローラーを取得するか、mvc 4 および .net 4.5 のベータ版を取得するまで待つことができます。

于 2012-08-01T17:24:26.997 に答える