without run method ejemplos await async c# microsoft-metro async-await

c# - run - Conversión de un método WebClient a async/await



return task c# (5)

Tengo un código existente que transfiero a Windows 8 WinRT. El código obtiene datos de la URL, invocando asincrónicamente un delegado pasado:

private void RequestData(string uri, Action<string> action) { var client = new WebClient(); client.DownloadStringCompleted += (s,e) => action(e.Result); client.DownloadStringAsync(new Uri(uri)); }

La conversión a WinRT requiere el uso de HttpClient y métodos asíncronos. He leído algunos tutoriales sobre async / await, pero estoy un poco desconcertado. ¿Cómo puedo cambiar el método anterior, pero mantener la firma del método para evitar cambiar mucho más de mi código?


¿Cómo puedo cambiar el método anterior, pero mantener la firma del método para evitar cambiar mucho más de mi código?

La mejor respuesta es "no". Si usa async , entonces async completamente.

private async Task<string> RequestData(string uri) { using (var client = new HttpClient()) { return await client.GetStringAsync(uri); } }


Siguiendo este ejemplo , primero crea la tarea asíncrona, luego obtiene su resultado usando await :

Task<string> downloadStringTask = client.DownloadStringTaskAsync(new Uri(uri)); string result = await downloadStringTask;




var client = new WebClient(); string page = await client.DownloadStringTaskAsync("url");

o

var client = new HttpClient(); string page = await client.GetStringAsync("url");