Main での非同期メソッドの呼び出し: 包括的なガイド
非同期プログラミングの領域では、次のことが必要な状況に遭遇することは珍しくありません。 Main メソッドから直接非同期メソッドを呼び出します。これを実現する方法を理解することは、非同期プログラミングの利点を活用するために非常に重要です。
Main での非同期メソッド呼び出し
次のコード スニペットを考えてみましょう:
<br>公開クラスtest<br>{</p> <pre class="brush:php;toolbar:false">public async Task Go() { await PrintAnswerToLife(); Console.WriteLine("done"); } public async Task PrintAnswerToLife() { int answer = await GetAnswerToLife(); Console.WriteLine(answer); } public async Task<int> GetAnswerToLife() { await Task.Delay(5000); int answer = 21 * 2; return answer; }
}
複数のアプローチ
非同期を呼び出すにはいくつかのアプローチがありますMain メソッドのメソッド:
1.非同期 Main メソッド (C# 7.1 以降)
C# 7.1 以降のバージョンでは、Main メソッドを非同期としてマークできます。これにより、次の例に示すように、Main メソッド内で非同期メソッドを直接使用できるようになります。
<br>static async Task Main(string[] args)<br>{</p> <pre class="brush:php;toolbar:false">test t = new test(); await t.Go(); Console.WriteLine("finished"); Console.ReadKey();
}
2. "Wait" メソッドを呼び出す
以前のバージョンの C# では、Wait メソッドを使用して、非同期メソッドが完了するまでスレッドをブロックできます。このアプローチを以下に示します。
<br>static void Main(string[] args)<br>{</p> <pre class="brush:php;toolbar:false">test t = new test(); t.Go().Wait(); Console.WriteLine("finished"); Console.ReadKey();
}
3. OnCompleted コールバック (従来のアプローチ)
場合によっては、最初のコード スニペットにあるように、OnCompleted コールバックの使用が必要になる場合があります。ただし、このアプローチはデッドロックにつながる可能性があるため、可能であれば回避する必要があります。
最適なアプローチ
C# 7.1 以降では、非同期 Main メソッドの使用が推奨されます。コードが簡素化され、コールバックベースの呼び出しが不要になるためです。以前のバージョンの C# では、Wait メソッドを使用できますが、スレッドのブロックに関連する潜在的なパフォーマンスへの影響に注意することが重要です。
結論
非同期メソッドの呼び出しMain メソッドからの変換は、さまざまな手法を通じて実現できます。さまざまなアプローチとその影響を理解することで、特定のニーズと使用している C# のバージョンに基づいて最適なソリューションを選択できます。
以上がC# で Main メソッドから非同期メソッドを適切に呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。