private static Await <string> DownloadAsync(string uri) { var url = new Uri(uri); return(complete => { var webClient = new WebClient(); var awaitDownload = Await.Event <DownloadDataCompletedEventArgs, DownloadDataCompletedEventHandler, string>( e => Result.Of(Encoding.ASCII.GetString(e.Result), e.Error).Success, h => webClient.DownloadDataCompleted += h, h => webClient.DownloadDataCompleted -= h, a => a.Invoke); var download = awaitDownload(complete); webClient.DownloadDataAsync(url); return download; }); }