C# のコンソール アプリケーションでの非同期プログラミング
C# プログラミングの領域では、'async' キーワードを使用した非同期プログラミング モデルは効率的なプログラミングを提供します。長時間実行される操作の完了を待つ間、スレッドのブロックを回避して実行します。ただし、このモデルを統合する場合、コンソール アプリケーションには課題が生じます。
非同期 Main 関数のジレンマ
同期プログラミングでは、「async」を伝播することが不可欠です。 ' キーワードは、エントリ ポイントから非同期関数に至るまで、コール スタック全体にわたって使用されます。ただし、コンソール アプリケーションでは、コンパイル エラーのため、エントリ ポイント (Main 関数) を非同期としてマークできません。
制限の克服
主なアプローチは 2 つあります。この制限を解決するには:
1.実行のブロック:
これには、非同期操作が完了するまでメイン スレッドをブロックすることが含まれます。これを実現する 1 つの方法は、返されたタスクで 'Wait' メソッドを利用することです。
static void Main() { MainAsync().Wait(); }
ただし、このアプローチでは、例外が AggregateException にラップされる可能性があります。これを回避するには、GetAwaiter().GetResult() メソッドの使用を検討してください:
static void Main() { MainAsync().GetAwaiter().GetResult(); }
2。独自のコンテキストを使用する:
または、カスタムの非同期コンテキストを作成して、非同期実行を管理することもできます。これにより、エントリ ポイントを非同期コードから分離できます。
static void Main() { AsyncContext.Run(() => MainAsync()); }
このアプローチは、コンソール アプリケーションで非同期操作を処理するための堅牢なメカニズムを提供します。
以上がC# コンソール アプリケーションで Async/Await を効果的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。