私のプロジェクトのベストプラクティスを見つけようとしています。これは、アイテムのリストを表示するUIを持つ典型的なWPFアプリケーションであり、結果を返すデータサービスがあります。Async await vs GetAwaiter()。GetResult()とコールバック
UIをブロックしないようにサービスを非同期に呼び出しています。私たちは、私たちの前にある2つのオプションがあります:サーバーへのHTTP呼び出しを行うクライアント側(
非同期を使用してこれはボタンからすべてのメソッド非同期のマーキング要求するキーワード を待つの層にサービスを提供するためにすべての方法をクリックし、クラス)とその間の任意のメソッド。このアプローチはどこでも非同期伝播の問題以外はうまく動作します
このアプローチでは、UIクライアントはサービスレイヤを呼び出し、コールバックをサービスレイヤに渡します。サービスレイヤはhttpコールをサーバーをタスク内に置き、GetAwaiter()。GetResult()を使用して、http呼び出しが終了すると、UIクライアントから渡されたコールバックを呼び出します。この場合、メソッドは非同期とマークする必要はありませんが、GetAwaiter()の使用については実際にはわかりません。
Task.Run(async()=> // httpコール、invoke callback).GetAwaiter()。GetResult );
私はより良いアプローチであるかを調べることを試みていると私は
私は、第2のアプローチがデッドロックになることは間違いないと確信しています。私は、Windows Universalを使って開発するときに何かに直面していたからです。 – Felype
例外の問題もあります。私は完全な非同期実装で、最後に 'AggregateException'を取得しますが、' GetAwaiter'メソッドで何が起こるのか分かりません。 – Eris
@Erisあなたが待っているときは、 'AggregateException'を取得しません。内部例外が発生します。 'GetResult'でも同じことが起こります。 – i3arnon