待機せずに非同期メソッドを呼び出すと、複雑な問題が発生する可能性があります。この記事では、結果を待たずに C# で非同期メソッドを安全に呼び出すためのソリューションについて説明します。
指定されたシナリオでは、データを返す GetStringData メソッドから非同期メソッド MyAsyncMethod が呼び出されます。待機しないと警告が生成され、例外が抑制されます。待機呼び出しを回避しながらこの問題を解決するには、次の点を考慮してください:
例外を処理するには ContinueWith を使用します:
<code class="language-csharp">MyAsyncMethod().ContinueWith(t => Console.WriteLine(t.Exception), TaskContinuationOptions.OnlyOnFaulted);</code>
このメソッドにより、別のスレッドでの例外処理が可能になります。呼び出しスレッドで MyAsyncMethod を待機する必要はありませんが、発生する可能性のある例外を処理するメカニズムを提供します。
ConfigureAwait(false) を使用した Try-Catch ブロック:
<code class="language-csharp">try { MyAsyncMethod().ConfigureAwait(false); // 注意:这里去掉了 await } catch (Exception ex) { Trace.WriteLine(ex); }</code>
このメソッドは、ConfigureAwait(false) オプションを利用して、非同期呼び出しによって生成される警告を抑制します。 try-catch ブロックを使用して例外を明示的に処理できます。 主な違いは、コンテキストの切り替えを避けるために await
MyAsyncMethod の代わりに ConfigureAwait(false)
を直接呼び出していることです。
追加メモ:
Web リクエストのコンテキスト (ASP.NET Web API など) では、非同期呼び出しの待機を避けることが重要です。これは、待機するとリクエストへの応答が遅れ、応答時間が長くなる可能性があるためです。提供されるソリューションにより、リクエストの処理速度を妨げることなく非同期呼び出しが可能になります。
以上がC# で非同期メソッドを待機せずに安全に呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。