446

最近、多くの非同期メソッドを使用するコードを読んでいましたが、同期的に実行する必要がある場合があります。コードは次のことを行います。

Foo foo = GetFooAsync(...).GetAwaiter().GetResult();

これと同じですか

Foo foo = GetFooAsync(...).Result;
4

7 に答える 7

235

かなり。ただし、小さな違いが1 つありTaskます。ただし、次の場合にこれらのいずれかを使用する意味は何ですか? 100 倍優れたオプションは、 を使用することです。GetResult()Task.ResultAggregateExceptionasyncawait

また、あなたは使用するつもりはありませんGetResult()。あなたのためではなく、コンパイラの使用のみを目的としています。しかし、煩わしい を使いたくない場合はAggregateException、それを使用してください。

于 2013-06-24T20:34:19.537 に答える
74

https://github.com/aspnet/Security/issues/59

「最後に 1 つ: and は常に内部例外をカプセル化し、メッセージを一般的なメッセージ (1 つ以上のエラーが発生した) に置き換えるため、可能な限り 使用Task.Resultを避ける必要があります。これにより、デバッグが難しくなります。同期バージョンが必要な場合でも、あまり頻繁に使用されないため、代わりに使用することを強く検討する必要があります。」Task.WaitAggregateExceptionTask.GetAwaiter().GetResult()

于 2015-07-31T08:59:16.690 に答える