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