2012-12-05 24 views
7

मैं का उपयोग कैसे कर सकता हूं विंडोज फोन 8 में HttpWebRequest के साथ?क्या विंडोज फोन 8 में IAsyncResult का इंतजार करने का कोई तरीका है?

क्या IAsyncResult सामान का इंतजार करने का कोई तरीका है?

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

TaskFactory.FromAsyncTask<Stream>BeginGetRequestStream/ विधियों से Task<Stream> बनाने के लिए उपयोग करें। फिर आप अपने OnGotWebRequest से पूरी तरह से छुटकारा पा सकते हैं, और प्रतिक्रिया के लिए वही काम करते हैं।

ध्यान दें कि वर्तमान में आप EndGetResponse कॉल कर रहे हैं जब एक BeginGetRequestStream कॉल पूरा करता है, जिसके साथ शुरू करने के लिए अनुचित है - आप मैच के लिए BeginFoo आप मूल रूप से कहा जाता है EndFoo विधि कॉल करने के मिल गया है। क्या आप BeginGetResponse पर कॉल करना चाहते थे?

+0

और आप शुरुआत/अंत के बारे में सही हैं। धन्यवाद! – swinefeaster

+1

क्या आप हमें कार्य बनाने और उपयोग करने के तरीके पर एक उदाहरण दे सकते हैं? –

+1

मुझे [इस सवाल पर SO] (http://stackoverflow.com/a/14098942/831825) में एक आदर्श कार्य उदाहरण मिला है। –

4

यदि आप Microsoft.Bcl.Async पैकेज स्थापित करते हैं, तो आपको HttpWebRequest के लिए कुछ async -ready एक्सटेंशन विधियां मिलती हैं।

+0

मैंने इन दिनों [इस ब्लॉग पोस्ट] पर ठोकर खाई है (http://wp.qmatteoq.com/async-targeting-pack-for-visual-studio-2012-why-its-useful-also-for-windows- फोन -8-प्रोजेक्ट्स /), जो बताता है कि WP8 में Microsoft.Bcl.Async पैकेज का उपयोग कैसे करें। –