2

System.Threading.Tasks.Taskクラスで非同期作業を実行しようとしています。シナリオは単純です。私は Web アプリを持っていて、1 回のボタン クリック イベントで、いくつかの外部サービスを数分間チェックするために実行する必要があるタスクを開始します。難しい作業ではありません。5 秒ごとにリクエストを送信し、レスポンスを取得するだけです。ただし、少なくとも数分間は実行する必要があります。したがって、このタスクが完了するまでユーザーを待たせたくありません。タスクを開始した後、すぐにユーザーに戻り、タスクが開始されたことを伝えます。完了したら通知されます。HTTPレスポンスを返して終了したので、作成したこのタスクは問題ないのだろうか。

4

4 に答える 4

4

このタイプの「非同期作業」は、型を使用することによっては不可能Taskです。私のブログで述べたように、asyncは HTTP プロトコルを変更しません。リクエストごとに 1 つの応答が得られます。それだけです。

理想的な ASP.NET アプリは、要求と応答の組み合わせ以外では何も実行しません。機能させる方法はありますが(私のブログでも説明されています)、推奨されることはほとんどありません。

適切な解決策は、処理を分割することです。Web サイト (またはサービス) は、永続ストレージ (Azure キューなど) に要求を配置して処理を開始する必要があります。別のワーカー サービス (Azure ワーカー ロール / Win32 サービスなど) がポーリングを行い、結果を永続ストレージに格納します。 (例: Azure テーブル)、Web サイト/サービスはそれをポーリングできます。

于 2013-04-15T15:47:35.650 に答える
0

メッセージ ベースのサービス バスの使用を検討できます。NHibernate と Rhino Service Busを使用した MSDN Building Distributed Apps に関する優れたチュートリアルは非常に役立ちます。

于 2013-04-15T15:09:26.760 に答える