前文讲到WP8中使用Async执行HTTP请求,用了微软提供的扩展。下面提供了一种方法,自己实现HttpWebRequest的扩展。
namespace HttpExtensions
{
public static class WebRequestExtensions
{
public async static Task<WebResponse> GetResponseAsync(this HttpWebRequest request)
{
return await Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, request);
}
public async static Task<Stream> GetRequestStreamAsync(this HttpWebRequest request)
{
return await Task<Stream>.Factory.FromAsync(request.BeginGetRequestStream, request.EndGetRequestStream, request);
}
}
}
随后就可以使用 await HttpWebRequest.GetResponseAsync() 轻松使用http请求了。</span>
</p>
附带一个WebClient的扩展
namespace HttpExtensions
webClient.OpenReadCompleted += (s, e) =>
return await tcs.Task;
public async static Task<string> GetStringAsync(this WebClient webClient, Uri uri)
webClient.DownloadStringCompleted += (s, e) =>
return await tcs.Task;
{
public static class WebClientExtensions
{
public async static Task<Stream> GetStreamAsync(this WebClient webClient, Uri uri)
{
var tcs = new TaskCompletionSource<Stream>();
{
if (e.Error != null)
{
tcs.SetException(e.Error);
}
else
{
tcs.SetResult(e.Result);
}
};
webClient.OpenReadAsync(uri);
}
{
var tcs = new TaskCompletionSource<string>();
{
if (e.Error != null)
{
tcs.SetException(e.Error);
}
else
{
tcs.SetResult(e.Result);
}
};
webClient.DownloadStringAsync(uri);
}
}
}