ホームページ > バックエンド開発 > C++ > 非同期C#メソッドを同期して呼び出すにはどうすればよいですか?

非同期C#メソッドを同期して呼び出すにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-02-02 13:01:09
オリジナル
455 人が閲覧しました

How Can I Call Asynchronous C# Methods Synchronously?

非同期C#メソッドを同期的に実行する

通常、

と宣言される非同期方法は、同時運用とユーザーエクスペリエンスの強化に不可欠です。 ただし、それらを既存の同期コードベースに統合するには、慎重に検討する必要があります。 いくつかのアプローチを調べてみましょう

メソッド1:public async Task Foo()

コンテキストの同期に依存しない簡単な非同期方法(例:Task.WaitAndUnwrapExceptionを使用しているもの)については、

は簡単な解決策を提供します:

ConfigureAwait(false) Task.WaitAndUnwrapExceptionこれは、

の余分なレイヤーなしで例外をきちんと処理します。 ただし、この方法は、
<code class="language-csharp">var task = MyAsyncMethod();
var result = task.WaitAndUnwrapException();</code>
ログイン後にコピー
にコンテキストの同期が必要な場合は不適切です。

メソッド2:AggregateException MyAsyncMethod

コンテキストの同期が不可欠な場合、

はネストされたコンテキストを提供します。 AsyncContext.RunTask これにより、これにより、使用しないタスクで待機をブロックすることで発生する可能性のあるデッドロックが効果的に防止されます。

メソッド3:

AsyncContext.RunTask が不適切である場合(例えば、非同期方法がUIイベントを待っている場合)、非同期メソッドをスレッドプールにオフロードします:

<code class="language-csharp">var result = AsyncContext.RunTask(MyAsyncMethod).Result;</code>
ログイン後にコピー

このアプローチでは、ConfigureAwait(false)がスレッドセーフであり、UI要素やASP.NET要求のコンテキストに依存しないことが要求されます。 または、メソッド1で

を使用すると、実行可能な代替手段が提供されます。

さらに読み取りTask.Run

より深い理解については、Stephen Clearyの洞察力に富んだ2015 MSDN記事「Asyncプログラミング - Brownfield Async Development」に相談してください。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート