C# 将HttpWebRequest从同步代码转换为异步代码
我需要将此代码从同步转换为异步代码,但迄今为止的每一次尝试都是令人沮丧的。有人有解决办法吗C# 将HttpWebRequest从同步代码转换为异步代码,c#,asynchronous,C#,Asynchronous,我需要将此代码从同步转换为异步代码,但迄今为止的每一次尝试都是令人沮丧的。有人有解决办法吗 var http = (HttpWebRequest)WebRequest.Create(Connection.GetUri(path).Uri); http.Accept = "application/json"; http.ContentType = "application/json"; http.Method = "POST"; var parsedContent = JsonConv
var http = (HttpWebRequest)WebRequest.Create(Connection.GetUri(path).Uri);
http.Accept = "application/json";
http.ContentType = "application/json";
http.Method = "POST";
var parsedContent = JsonConvert.SerializeObject(value);
var encoding = new ASCIIEncoding();
var bytes = encoding.GetBytes(parsedContent);
var newStream = http.GetRequestStream();
newStream.Write(bytes, 0, bytes.Length);
newStream.Close();
var response = http.GetResponse();
var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
return JsonConvert.DeserializeObject<TReturnType>(sr.ReadToEnd());
var http=(HttpWebRequest)WebRequest.Create(Connection.GetUri(path.Uri);
http.Accept=“application/json”;
http.ContentType=“application/json”;
http.Method=“POST”;
var parsedContent=JsonConvert.SerializeObject(值);
var encoding=new ascienceoding();
var bytes=encoding.GetBytes(parsedContent);
var newStream=http.GetRequestStream();
newStream.Write(字节,0,字节,长度);
newStream.Close();
var response=http.GetResponse();
var stream=response.GetResponseStream();
var sr=新的流阅读器(流);
返回JsonConvert.DeserializeObject(sr.ReadToEnd());
对于上下文,问题是我无法使用System.Net.Http程序集,但需要异步支持
.
由于无法使用上述程序集,上述代码已从以下位置移植。客户端类型为HttpClient
var response = await Connection.Client.PostAsync(
Connection.GetUri("/transaction/announce").Uri,
new StringContent(JsonConvert.SerializeObject(Rpa).ToString(),
Encoding.UTF8,
"application/json"));
return JsonConvert.DeserializeObject<NemAnnounceResponse.Response>(
await response.Content.ReadAsStringAsync());
var response=wait Connection.Client.PostAsync(
Connection.GetUri(“/transaction/announce”).Uri,
新建StringContent(JsonConvert.SerializeObject(Rpa).ToString(),
Encoding.UTF8,
“应用程序/json”);
返回JsonConvert.DeserializeObject(
wait response.Content.ReadAsStringAsync());
HttpWebRequest
不提供现代的基于任务的异步方式来获取响应。但它允许您使用旧的APM模式进行异步调用。见方法
幸运的是,您可以使用辅助方法(如task.Factory.fromsync
)轻松地将老式的APM转换为基于任务的APM。最终你应该得到这样的smth:
public static Task<WebResponse> GetResponseAsync()
{
var http = (HttpWebRequest)WebRequest.Create(Connection.GetUri(path).Uri);
http.Accept = "application/json";
http.ContentType = "application/json";
http.Method = "POST";
var parsedContent = JsonConvert.SerializeObject(value);
var encoding = new ASCIIEncoding();
var bytes = encoding.GetBytes(parsedContent);
var newStream = http.GetRequestStream();
newStream.Write(bytes, 0, bytes.Length);
newStream.Close();
Task<WebResponse> task = Task.Factory.FromAsync(
http.BeginGetResponse,
asyncResult => http.EndGetResponse(asyncResult),
(object)null);
return task;
}
公共静态任务GetResponseAsync()
{
var http=(HttpWebRequest)WebRequest.Create(Connection.GetUri(path.Uri);
http.Accept=“application/json”;
http.ContentType=“application/json”;
http.Method=“POST”;
var parsedContent=JsonConvert.SerializeObject(值);
var encoding=new ascienceoding();
var bytes=encoding.GetBytes(parsedContent);
var newStream=http.GetRequestStream();
newStream.Write(字节,0,字节,长度);
newStream.Close();
Task Task=Task.Factory.fromsync(
http.BeginGetResponse,
asyncResult=>http.EndGetResponse(asyncResult),
(对象为空);
返回任务;
}
甚至使用wait调用它,比如
var response=wait-GetResponseAsync()代码>然后继续响应。为什么不能使用HttpClient
?