C’è un modo per attendere un IAsyncResult in Windows Phone 8?

Come posso utilizzare Attendere con HttpWebRequest in Windows Phone 8?

C’è un modo per far funzionare le cose IAsyncResult?

private async Task 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(); } } 

Grazie!

Utilizzare TaskFactory.FromAsync per creare un’attività Task dai metodi BeginGetRequestStream / EndGetRequestStream . Quindi puoi eliminare completamente OnGotWebRequest e fare la stessa cosa per la risposta.

Nota che al momento stai chiamando EndGetResponse quando una chiamata BeginGetRequestStream termina, il che è inappropriato per iniziare – devi chiamare il metodo EndFoo per abbinare il BeginFoo hai originariamente chiamato. Intendevi chiamare BeginGetResponse ?

Se si installa il pacchetto Microsoft.Bcl.Async , si ottengono alcuni metodi di estensione già async , inclusi quelli per HttpWebRequest .