ホームページ >バックエンド開発 >C++ >C#の同期コードから非同期メソッドを呼び出す方法は?

C#の同期コードから非同期メソッドを呼び出す方法は?

Barbara Streisand
Barbara Streisandオリジナル
2025-02-02 12:46:18290ブラウズ

How to Call Asynchronous Methods from Synchronous Code in C#?

c#

の同期メソッドから非同期メソッドを呼び出す 非同期プログラミングは、C#開発でますます人気が高まっています。同期のコンテキストから非同期メソッドを呼び出す必要がある状況に遭遇する場合があります。これは通常、非同期方法によって実装されますが、この記事では、このギャップにもたらされるさまざまな方法について説明します。

方法1:Task.Waitandunwrapexception 非同期方法が単純で、そのコンテキストと同期する必要がない場合は、task.waitandunwrapexceptionを使用して結果を取得できます。この方法は、非同期操作中に発生する可能性のある異常を解決します。

メソッド2:Asynccontext.runtask コンテキストと同期する必要がある方法の場合、asynccontext.runtaskを使用してネストされたコンテキストを作成できます。デフォルトでは、AsyncContextは現在の同期コンテキストをカプセル化します。ただし、あらゆるコンテキストに適用できます。

<code class="language-csharp">var task = MyAsyncMethod();
var result = task.WaitAndUnwrapException();</code>
メソッド3:task.run

を使用します asynccontext.runtaskが実行不可能な場合は、task.runを使用して、個別のスレッドで非同期操作を開始できます。この方法により、非同期方法は、呼び出しスレッドをブロックせずに実行を継続できます。

予防策
<code class="language-csharp">var result = AsyncContext.RunTask(MyAsyncMethod).Result;</code>

これらのメソッドを使用する場合、次のポイントを覚えておいてください:

メソッドは、コンテキストの同期を必要としないメソッドにのみ適用されます。

<code class="language-csharp">var task = Task.Run(async () => await MyAsyncMethod());
var result = task.WaitAndUnwrapException();</code>
方法2非同期メソッドがUIインシデントを待っている場合、それはデッドロックにつながる可能性があります。

方法3では、非同期メソッドがマルチスレッドコンテキストで適切に操作されることが必要です。

以上がC#の同期コードから非同期メソッドを呼び出す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。