最近、多くの非同期メソッドを使用するコードを読んでいましたが、同期的に実行する必要がある場合があります。コードは次のことを行います。
Foo foo = GetFooAsync(...).GetAwaiter().GetResult();
これと同じですか
Foo foo = GetFooAsync(...).Result;
最近、多くの非同期メソッドを使用するコードを読んでいましたが、同期的に実行する必要がある場合があります。コードは次のことを行います。
Foo foo = GetFooAsync(...).GetAwaiter().GetResult();
これと同じですか
Foo foo = GetFooAsync(...).Result;
かなり。ただし、小さな違いが1 つありTaskます。ただし、次の場合にこれらのいずれかを使用する意味は何ですか? 100 倍優れたオプションは、 を使用することです。GetResult()Task.ResultAggregateExceptionasyncawait
また、あなたは使用するつもりはありませんGetResult()。あなたのためではなく、コンパイラの使用のみを目的としています。しかし、煩わしい を使いたくない場合はAggregateException、それを使用してください。
https://github.com/aspnet/Security/issues/59
「最後に 1 つ: and は常に内部例外をカプセル化し、メッセージを一般的なメッセージ (1 つ以上のエラーが発生した) に置き換えるため、可能な限り 使用
Task.Resultを避ける必要があります。これにより、デバッグが難しくなります。同期バージョンが必要な場合でも、あまり頻繁に使用されないため、代わりに使用することを強く検討する必要があります。」Task.WaitAggregateExceptionTask.GetAwaiter().GetResult()