I have some existing code which I am porting to Windows 8 WinRT. The code fetches data from URL, asynchronously invoking a passed delegate:
private void RequestData(string uri, Action<string> action) { var client = new WebClient(); client.DownloadStringCompleted += (s,e) => action(e.Result); client.DownloadStringAsync(new Uri(uri)); }
Converting to WinRT requires the use of HttpClient
and asynchronous methods. I've read a few tutorials on async / await, but am a bit baffled. How can I change the method above, but maintain the method signature in order to avoid changing much more of my code?
private async void RequestData(string uri, Action<string> action) { var client = new WebClient(); string data = await client.DownloadStringTaskAsync(uri); action(data); }
See: http://msdn.microsoft.com/en-us/library/hh194294.aspx
How can I change the method above, but maintain the method signature in order to avoid changing much more of my code?
The best answer is "you don't". If you use async
, then use it all the way down.
private async Task<string> RequestData(string uri) { using (var client = new HttpClient()) { return await client.GetStringAsync(uri); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With