繁体   English   中英

如何在异步/等待中使用System.Net.HttpWebRequest?

[英]How can I use System.Net.HttpWebRequest with async/await?

我一直试图将一个简单的HTTP客户端编写为具有最小依赖性的可移植类库,这使我认为我应该使用System.Net.HttpWebRequest

看了文档 ,但是只显示了GetResponse / GetResponseStream方法,我的实现中没有这些方法。 我只有BeginGetResponseBeginGetResponseStream等。我尝试使用Task.Factory.FromAsync将其转换为Task ,但是仅返回Task ,而不返回Task<HttpWebResponse>

这里是使用演员表的正确方法,例如以下吗?

var response = (Task<HttpWebResponse>)Task.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse);

还是我错过了什么?

编辑:我不想引入对其他NuGet包的依赖,因为我需要做的只是在一个小库中的一个位置中的单个HTTP请求。

如果使用通用Task<>.Factory ,则类型安全性更高:

var request = WebRequest.CreateHttp("https://www.google.com");
object state = null; // or whatever state you want.
var task = Task<WebResponse>.Factory.FromAsync(
    request.BeginGetResponse,
    request.EndGetResponse, 
    state);

但是,与不进行async调用时一样,如果要使用HttpWebResponse而不是WebResponse ,则需要执行其他强制转换。 并确保关闭/处理您的回复:

using (var response = (HttpWebResponse) (await task))
{
    // use response
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM