私はC#の新しい演算子async
と演算子について読んawait
でいて、どのような状況でそれらが私に役立つ可能性があるかを理解しようとしました。私はいくつかのMSDNの記事を研究しましたが、これが行間で読んだものです。
WindowsフォームとWPFイベントハンドラーに使用async
できるため、操作の大部分が実行されている間、UIスレッドをブロックすることなく長いタスクを実行できます。
async void button1_Click(object sender, EventArgs e)
{
// even though this call takes a while, the UI thread will not block
// while it is executing, therefore allowing further event handlers to
// be invoked.
await SomeLengthyOperationAsync();
}
を使用するメソッドはであるawait
必要がありますasync
。つまり、async
コード内のどこかで関数を使用すると、UIイベントハンドラーから最下位レベルのasync
メソッドまでの呼び出しシーケンスのすべてのメソッドも強制的に使用さasync
れます。
つまり、通常の古き良きThreadStart
エントリポイント(または古き良きコンソールアプリケーション)を使用してスレッドを作成すると、static int Main(string[] args)
使用できなくなります。ある時点でを使用する必要があるため、それを使用するメソッドを作成します。したがって、呼び出しメソッドでは、それを使用して作成する必要があります。ただし、スレッドのエントリポイント(または)に到達すると、が制御を譲る呼び出し元はありません。async
await
await
async
await
async
Main()
await
したがって、基本的には、標準のWinFormsとWPFメッセージループを使用するGUIがないasync
と使用できません。MSDNは、プログラミングはマルチスレッドを意味するのではなく、代わりにUIスレッドの空き時間を使用するawait
と述べているので、それは確かに理にかなっていると思います。async
コンソールアプリケーションまたはユーザー定義のエントリポイントを持つスレッドを使用する場合、非同期操作を実行するにはマルチスレッドが必要になります(互換性のあるメッセージループを使用しない場合)。
私の質問は、これらの仮定は正確ですか?