特にI/O操作を処理するときにMVCコントローラで非同期アクションが発生した場合、何が起こっているのか正確にはわかりません。のは、私がアップロードのアクションを持っているとしましょう:ASP.NET MVCでのasync/awaitの深い理解
public async Task<ActionResult> Upload (HttpPostedFileBase file) {
....
await ReadFile(file);
...
}
私はこれらのことが起こるの基本的な手順です知ってから:
新しいスレッドがスレッドプールから覗くと、要求をincomming処理するために割り当てられています。
コールがI/O操作の場合は、元のスレッドがプールに戻り、コントロールがいわゆるIOCP(入力出力完了ポート)に転送されます。私が理解できないことは、依頼がまだ生きていて、最終的に呼び出し側のクライアントが要求を完了するのを待つので、答えを待つことです。
私の質問は:誰が/いつ/どのように完全なブロックが発生するのですか?
注:私はThere Is No Threadブログの記事を見て、それがGUIアプリケーションのために理にかなっているが、このサーバー側のシナリオのために、私はそれを得ることはありません。本当に。
あなたが探しているもの:regular [IHttpAsyncHandler](https://msdn.microsoft.com/en-us/library/system.web.ihttpasynchandler(v = vs.110).aspx)の'async' /' await'、なぜ 'IHttpAsyncHandler'がまったく動作するのでしょうか? –
私はあなたが理解していない部分を理解しようとするのは苦労します。ハンドリングスレッドがプールに戻された場合、要求が停止する理由はありません。後で、おそらく別のスレッドで再開します。 BTW制御はIOCPに転送されない*。 –