たとえば、
HttpWebRequest
同期的に使用しているときにUIスレッドがブロックされ、インターネット上のリソースを要求するWinformのシナリオ。ここでは、非同期メソッドを使用してメソッドを実行できますが、特定のタスクのawaitキーワードを使用すると、リクエストがまだ実行されている場合でも、ユーザーはwinformを操作できます。
これは委任によっても達成できるので、非同期機能の利点は何ですか?
たとえば、
HttpWebRequest
同期的に使用しているときにUIスレッドがブロックされ、インターネット上のリソースを要求するWinformのシナリオ。ここでは、非同期メソッドを使用してメソッドを実行できますが、特定のタスクのawaitキーワードを使用すると、リクエストがまだ実行されている場合でも、ユーザーはwinformを操作できます。
これは委任によっても達成できるので、非同期機能の利点は何ですか?
私の意見で最も優れた利点の1つは、より少ないコード行で非同期プログラミングパターンを理解するためのより簡潔な方法です。それがどのように機能するかをより明確に見たい場合は、Jon Skeetが回答したこの質問をチェックしてください:Task <int>はどのようにしてintになりますか?
async and await termonoligyははるかに単純であり、いくつかのキーワードを追加するだけで、同期アプリケーションを実行するのと同じように、基本的にコードを記述できます。
MSDNから:
非同期プログラミングを使用することで、パフォーマンスのボトルネックを回避し、アプリケーションの全体的な応答性を向上させることができます。ただし、非同期アプリケーションを作成するための従来の手法は複雑になる可能性があり、作成、デバッグ、および保守が困難になります。
Visual Studio 2012では、.NETFramework4.5およびWindowsランタイムでの非同期サポートを活用する単純化されたアプローチである非同期プログラミングが導入されています。コンパイラーは、開発者が行っていた困難な作業を実行し、アプリケーションは同期コードに似た論理構造を保持します。その結果、わずかな労力で非同期プログラミングのすべての利点を得ることができます。
http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx
「委任」とは、バックグラウンドスレッドから同期メソッドを呼び出すことを意味すると思います。
async
他の人が指摘しているように、コードはandを使用して読み書きする方が簡単ですが、await
別の重要な違いもあります。
同期メソッドを使用する場合、操作が完了するまで呼び出しスレッドはブロックされます。
バックグラウンドスレッドから同期メソッドを使用する場合、UIスレッドはブロックされませんが、バックグラウンドスレッドはブロックされます。
非同期メソッドを使用する場合、スレッドはブロックされません。これにより、スレッドプールへのプレッシャーを軽減しながら、リソースをより効率的に使用できます。