2012-04-16 9 views
4

私はMVC.netを学び始め、this documentationに従っています。非同期mvc .net:非同期メソッドからビューを返す方法

があり、非同期コントローラは、2つのメソッドを実装するアクションがニュースは、我々がvoidを返しますNewsAsyncと呼ばれる方法を、持っているだろうと呼ばれると言う、とが返されますNewsCompleted、と説明していますビューが表示され、未処理操作が返されると呼び出されます。

私の関心事は、私は実際に操作が開始された後にビューを返すことができない非同期操作のポイントがないことです。非同期コールバックが返されるまで、ユーザーがサービスから何のフィードバックも得られない場合は、最初に非同期コントローラを気にする必要があります。

非同期操作の開始後に中間表示を返す方法はありますか?この明らかな限界について私は不必要に心配していますか?私はMVC.netに欠けているものがありますか?

+0

上記のリンク先の記事は古代のものです。http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4 – RickAndMSFT

答えて

0

1つの戦略は、クライアントにポーリングを設定することです。結果が生成されると、ユーザーに通知されます。

3

非同期コントローラのポイントは、スレッドの再利用を促進することです。リソースをブロックする特に長い実行要求がある場合は、要求キューを拘束しません。要求側に情報を返すこととは関係ありません。最後に、非同期コントローラと通常のコントローラの間に違いは見られません。

それはもっとアヤックスフレンドリーなものではありません。良い例は、画像のレンダリングを開始する要求があった場合です。伝統的に、その要求スレッドは、CPUが画像をレンダリングしている間に消費されることになります。非同期パターンではイメージをレンダリングできますが、レンダリングが完了するまで別のWebリクエストを処理するためにスレッドを解放して、サーバーのスループットを向上させることができます。

+2

実際に画像のレンダリングは次のとおりです。優れた例ではなく、別のスレッドがCPUを大量に消費するため、画像をレンダリングする必要はありません。より良い例は、I/O要求を行うことである。外部のWebサービスなどに問い合わせる。その場合、リクエストスレッドはレスポンスを待ってブロックされますが、これは無駄です。それはその間に他の要求を処理することができます。 – BFree

+0

もちろん、それも動作します。基本的な考え方は、スレッドが別のリソースでブロックされるのではなく、要求キューで絶えず動作していることです。 – Tejs

+1

いいえ、2つは実際には全く異なります。 CPUの作業が集中している場合、別のスレッドにそれをオフロードするだけで何もできません。他のスレッドはまだすべての作業を行う必要があります。実際、コンテキスト切り替えのために実際にはパフォーマンスが低下します。しかし、I/O操作の場合、ネットワークカードが終了するのを待っているスレッドはブロックされ、何もしません。大きな浪費。 CPUバウンドとI/Oバウンドの違いを読んでください。 – BFree

関連する問題