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