2
 var factory1 = new TaskFactory();
 var task1 =  factory1.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null).Result;

上記のコードは Windows 8 と Windows ストアで動作しますが、Windows Phone 8 で実行しようとすると動作しません。フリーズするだけで何も応答しません。タスクを実行するのに永遠にかかるようです。

私の目的は、asycn と await メソッドを使用せずに、Web サービスを同期的に呼び出すことです。

4

2 に答える 2

6

私の目的は、asycn と await メソッドを使用せずに、Web サービスを同期的に呼び出すことです。

あなたはそれをするべきではありません。WP8/Win8 は非同期であると想定されています。async非同期プログラミングをawait簡単にします。

デッドロックの状況を詳細に説明するブログ投稿Resultがあります (このシナリオで発生することに少し驚いています)。つまり、asyncメソッドは UI スレッドで再開しようとしていますが、UI スレッドはasyncメソッドの完了を待ってブロックされています。

なぜ同期したいのですか?

于 2012-12-04T13:16:55.967 に答える
5

これは起こるはずです。Result をリクエストすると、アプリケーションは停止し、実際に結果が得られるまで待機します。これは、同期的に待機することを意味します。

非同期で待機する場合は、 awaitキーワードを使用する必要があります。そのセマンティクスは次のとおりです。結果を取得したら、実行を続行します。それまでの間、UI の作業を続けてください。

これが、待機 (暗黙の同期) と非同期待機 (別名 await) の違いです。

于 2012-12-04T07:26:55.087 に答える