2012-12-05 17 views
7

は、Windows Phone 8のHttpWebRequestでを使用するにはどうすればよいですか?Windows Phone 8でIAsyncResultを待つ方法はありますか?

IAsyncResultをawaitで動作させる方法はありますか?

private async Task<int> GetCurrentTemperature() 
{ 
    GeoCoordinate location = GetLocation(); 

    string url = "http://free.worldweatheronline.com/feed/weather.ashx?q="; 
    url += location.Latitude.ToString(); 
    url += ","; 
    url += location.Longitude.ToString(); 
    url += "&format=json&num_of_days=1&key=MYKEY"; 

    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); 
    webRequest.Method = "POST"; 
    webRequest.BeginGetResponse(new AsyncCallback(OnGotWebRequest), webRequest); 
} 

private void OnGotWebRequest(IAsyncResult asyncResult) 
{ 
    HttpWebRequest webRequest = (HttpWebRequest)asyncResult.AsyncState; 
    var httpResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncResult); 
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
    { 
    string responseText = streamReader.ReadToEnd(); 
    } 
} 

ありがとうございます!

答えて

16

BeginGetRequestStream/EndGetRequestStreamのメソッドからTask<Stream>を作成するには、TaskFactory.FromAsyncを使用します。その後、あなたはOnGotWebRequestを完全に取り除くことができ、応答についても同じことをすることができます。始まるのは不適切であるBeginGetRequestStreamコールが完了したときに、現在あなたがEndGetResponseを呼んでいる

注意、 - あなたは、もともとと呼ばれるBeginFooに一致するようにEndFooメソッドを呼び出すようになってきました。 BeginGetResponseに電話したのですか?

+0

あなたは始終について正しいです。ありがとう! – swinefeaster

+1

タスクを作成して使用する方法の例を教えてください。 –

+1

私は完全な実例を[これに関する質問](http://stackoverflow.com/a/14098942/831825)で見つけました。 –

4

Microsoft.Bcl.Asyncパッケージをインストールすると、を含むいくつかのasyncがあります。

+0

私は([このブログの記事]時に、これらの日つまずいてきましたhttp://wp.qmatteoq.com/async-targeting-pack-for-visual-studio-2012-why-its-useful-also-for-windows- phone-8-projects /)、WP8でMicrosoft.Bcl.Asyncパッケージを使用する方法について説明しています。 –

関連する問題