C# 如何使HttpWebRequest函数异步?
我正在尝试使我的函数异步。我该怎么办?这是一个HttpWebRequestC# 如何使HttpWebRequest函数异步?,c#,.net-core-3.0,C#,.net Core 3.0,我正在尝试使我的函数异步。我该怎么办?这是一个HttpWebRequest private void PostToGoogleChat(string json) { HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(_chatUrl); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST
private void PostToGoogleChat(string json)
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(_chatUrl);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(json);
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
}
您是新手,所以我不会详细介绍HttpClient,但是应该重用该实例。试着做一些关于如何实现这一点的自我研究。如果您真的想使用HttpWebRequest,最接近异步的工作流如下所示:
HttpWebRequest webRequest;
void BeginWebRequest()
{
webRequest.BeginGetResponse(new AsyncCallback(EndWebRequest),null);
}
void EndWebRequest(IAsyncResult result)
{
webRequest.EndGetResponse(result);
}
上面的代码使用旧的“回调”方式进行异步通信。您的请求结果将通过EndWebRequest方法接收
这样说,你应该考虑切换到HttpClient,因为它支持更容易的“AsiNC ->等待”语法。
“如何制作HTTPWebRebug函数AsiNC”:通过使用HTTPcli客户代替。使用HTTPcli客户代替。没有理由在核心3的新代码中仍然使用WebRequest等代码>但不要使用它。改用HttpClient。请求既不是同步的,也不是异步的,它只是一个请求对象。获取响应需要是同步的,或者asyncHttpClient应该是静态的。根据文件。“它打算实例化一次并在应用程序的整个生命周期内重复使用。为每个请求实例化HttpClient类将耗尽重载下可用的套接字数量。这将导致SocketException错误。”@WilliamXifaras-重复使用:是。静态:不是唯一的选项,通常也不是最好的。它不需要是“静态的”,但实例需要通过singleton或HttpClientFactory(池)重用。因为他是新来的,所以我只是向他展示如何简单地发出异步请求。我觉得没有必要编辑它,因为客户端生命周期与发出异步请求无关@WilliamXifaras@Going-是的,我喜欢HttpClientFactory而不是HttpClient。@Henkholtman是真的,这是有争议的,但我不会在这里这么做。考虑到它的.NET内核,我会选择使用HttpClientFactory。有了它,你可以把它变成一个值得期待的方法。但仍然不如使用HttpClient好。HttpWebRequest webRequest;
void BeginWebRequest()
{
webRequest.BeginGetResponse(new AsyncCallback(EndWebRequest),null);
}
void EndWebRequest(IAsyncResult result)
{
webRequest.EndGetResponse(result);
}