2011-06-23 18 views
0

Async CTP SP1を使用してDownloadStringAsyncの代わりにDownloadStringTaskAsyncを使用するように、WP7コードの束を変換しました。私は私のWindowsマシン上のコンソールアプリケーションでこのメソッドを実行した場合DownloadStringTaskAsyncをWP7で検索すると結果が返される

var wc = new WebClient(); 
var result = wc.DownloadStringTaskAsync("http://www.weather.gov").Result; 

:それは私が私のコードの束を煮詰め、これら2行になってしまったので、働いていませんでした。その作品は私が期待しているように、私はweather.govの内容で文字列を取得します。空のWP7アプリケーションで同じコンストラクタで2行を実行すると、Resultが利用可能になるのを待つ間にハングします。

私はこれらの行を修正するのに手伝ってもらえますか?あるいはこれはCTPのバグなので、今のところそれをスキップする必要があります。

答えて

2

Windows PhoneはUIスレッドでHTTP要求を返します。 Resultにアクセスすると、UIスレッドがブロックされるため、応答が返されなくなります。

非同期CTPを使用していることを考慮すると、なぜブロックする必要がありますか?

var result = await wc.DownloadStringTaskAsync("http://www.weather.gov"); 
+0

リチャードはちょうどここにあります。非同期APIを使用しているため、その結果をブロックしてはいけません。 Async CTPでこれを使用する正しい方法は、非同期修飾子をそのメソッドに追加することです。次に、直接呼び出しではなく連鎖されたメソッド呼び出しは、「LowerMethodCall(...)を待つ」のようなものです。 最後に注意しなければならないのは、Resultプロパティと同様に、完了するためにUIスレッドを処理する必要がないことが確かでない限り、UIスレッド中にタスクでWait()を呼び出さないでください。 。 –

+0

感謝します、ありがとう。私の実際のコードはawait/asyncを使用していますが、何が起こっているのか把握しようとしているときにこの問題を発見しました。 –

関連する問題