如何使 HttpWebRequest 函数异步?
How to make a HttpWebRequest function Async?
我正在尝试使我的函数异步。我该怎么做?它是一个 HttpWebRequest
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 client = new HttpClient();
public async Task PostAsync(string actionName, object json)
{
var content = new StringContent(json.ToString(), Encoding.UTF8,"application/json");
var resultRoles = await client.PostAsync(new Uri(actionName),content);
}
您是新手,所以我不会详细介绍 HttpClient,但应该重用该实例。尝试对如何实现这一点进行一些自我研究。
如果您真的想要使用 HttpWebRequest,最接近异步工作流程的是这样的:
HttpWebRequest webRequest;
void BeginWebRequest()
{
webRequest.BeginGetResponse(new AsyncCallback(EndWebRequest),null);
}
void EndWebRequest(IAsyncResult result)
{
webRequest.EndGetResponse(result);
}
上面的代码使用旧的 "callback" 风格方法进行异步通信。您的请求结果将通过 EndWebRequest 方法接收。
也就是说,您应该考虑切换到 HttpClient,因为它支持更简单的 "async -> await" 语法。
我正在尝试使我的函数异步。我该怎么做?它是一个 HttpWebRequest
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 client = new HttpClient();
public async Task PostAsync(string actionName, object json)
{
var content = new StringContent(json.ToString(), Encoding.UTF8,"application/json");
var resultRoles = await client.PostAsync(new Uri(actionName),content);
}
您是新手,所以我不会详细介绍 HttpClient,但应该重用该实例。尝试对如何实现这一点进行一些自我研究。
如果您真的想要使用 HttpWebRequest,最接近异步工作流程的是这样的:
HttpWebRequest webRequest;
void BeginWebRequest()
{
webRequest.BeginGetResponse(new AsyncCallback(EndWebRequest),null);
}
void EndWebRequest(IAsyncResult result)
{
webRequest.EndGetResponse(result);
}
上面的代码使用旧的 "callback" 风格方法进行异步通信。您的请求结果将通过 EndWebRequest 方法接收。
也就是说,您应该考虑切换到 HttpClient,因为它支持更简单的 "async -> await" 语法。