2017-11-08 23 views
-1

私はasync/awaitを学習しており、ConfigureAwaitをasync/awaitで使用することについてブログで触れました。ConfigureAwaitをfalseで使用することについての現実的な説明C#

ConfigureAwaitはブール型のcontinueOnCapturedContextパラメータを受け入れます:trueはデフォルトの動作を使用することを意味し、falseを渡すと、デリゲートの呼び出しを元のコンテキストに強制的にマーシャリングする必要はなくなります。代わりに、システムが適していると見なすデリゲートを実行します。

詳細はあまり詳しく説明されていませんが、誰でも実際の使用例を説明できます。私はさらに検索し、HTTPコールなどで使用する必要があることを知っていましたが、なぜそれを使用すべきかについて具体的な答えが得られませんでした。

参考リンク:https://blogs.msdn.microsoft.com/windowsappdev/2012/04/24/diving-deep-with-winrt-and-await/

答えて

1

これは、単一のスレッドが複数のアクションを扱うシナリオに便利です、ディスパッチャWPFのスレッドまたはIISでホストスレッドを考えます。 を指定しておらず、要求にかなりの時間がかかる場合は、他の要求は処理されません。これは、Asp.Net(Windowsおよび完全な.net、IISでホストされています)で最も顕著です。同じw3wp.exeプロセス。

アプリ全体が基本的にブロックされています。

これは、コントロールがスレッドプールから別のスレッドを使用してこのスタックに戻り、基本的にメインスレッドのブロックを解除できるということです。

+0

答えのThnx。しかし、非同期のときにコードが別のスレッドで実行されていませんか?どうして我々はConfigureAwaitの世話をしなければならないのですか? – Dishant

+0

コードが実行されていないので、asyncはIO操作(ネットワーク、ディスクなど)を待っている間は効果的に何もしないことで機能します。その後、制御はasyncの直後の行に戻され、THATはあるスレッドで発生するはずです。 ConfigureAwaitでは、どちらを選択するかを選択できます。 – zaitsman

+1

@Dishantいいえ、Stephen Toub氏は[こちら](https://blogs.msdn.microsoft.com/pfxteam/2011/01/13/await-anything/)または他の場所で** async ** in and ofを指摘していますそれ自体はスレッドとは関係ありません。設計のパラダイムとして、並行性を促進することができますが、デフォルトではそうしません。基本的には、asyncは、もしそうでなければいつでもブロックするのではなく、他の保留中の作業を行うために回り込んで、* single *スレッドが常に進歩を遂げることを確実にする方法と考えることができます。 –

関連する問題