Main での非同期メソッドの呼び出し
C# では、非同期プログラミングを使用して、ノンブロッキング方式で操作を実行できます。非同期メソッドを使用すると、タスクを他のコードと同時に実行でき、スレッドを解放して他のタスクを処理できるようになります。ただし、Main メソッド自体が非同期メソッドではない非同期メソッドを Main メソッドから呼び出す場合、Main メソッドが非同期操作の完了を待機できるようにいくつかの調整を行う必要があります。
非同期 Main メソッドの使用 (C# 7.1 以降)
C# 7.1 以降、Main メソッドは次のように変更できます。 async により、await 演算子を直接使用できるようになります。これにより、Main メソッドが非同期操作のエントリ ポイントとして機能できるようになります。例:
static async Task Main(string[] args) { test t = new test(); await t.Go(); Console.WriteLine("finished"); Console.ReadKey(); }
ブロッキング待機メソッドの使用 (以前の C# バージョン)
以前のバージョンの C# では、Main メソッドを非同期として宣言できません。代わりに、await 演算子を直接使用することはできません。 Wait メソッドを使用して、非同期操作が完了するまで手動で待つ必要があります。例:
static void Main(string[] args) { test t = new test(); t.Go().Wait(); Console.WriteLine("finished"); Console.ReadKey(); }
デッドロックの回避
質問で提供されている例では、GetAwaiter.OnCompleted を使用して Go タスクの完了を処理しようとしています。ただし、すでに同期されているコンテキストに対して同期継続を実行しようとするため、デッドロックが発生する可能性があります。 Main メソッドを非同期に変更するか、前述のように Wait メソッドを使用することで、この問題を回避し、非同期操作が適切に完了できるようにします。
以上がC# の Main メソッドで非同期メソッド呼び出しを適切に待つ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。