の同期メソッドから非同期メソッドを呼び出す 非同期プログラミングは、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 サイトの他の関連記事を参照してください。