私は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)使用できなくなります。ある時点でを使用する必要があるため、それを使用するメソッドを作成します。したがって、呼び出しメソッドでは、それを使用して作成する必要があります。ただし、スレッドのエントリポイント(または)に到達すると、が制御を譲る呼び出し元はありません。asyncawaitawaitasyncawaitasyncMain()await
したがって、基本的には、標準のWinFormsとWPFメッセージループを使用するGUIがないasyncと使用できません。MSDNは、プログラミングはマルチスレッドを意味するのではなく、代わりにUIスレッドの空き時間を使用するawaitと述べているので、それは確かに理にかなっていると思います。asyncコンソールアプリケーションまたはユーザー定義のエントリポイントを持つスレッドを使用する場合、非同期操作を実行するにはマルチスレッドが必要になります(互換性のあるメッセージループを使用しない場合)。
私の質問は、これらの仮定は正確ですか?