通过 http 异步发送数据
Posted
技术标签:
【中文标题】通过 http 异步发送数据【英文标题】:Send data over http asynchronously 【发布时间】:2015-02-17 15:22:40 【问题描述】:我是 C# 新手,我希望异步发送 Web 请求。我使用带有方法POST
的HttpWebRequest。问题是,如果我使用函数GetRequestStream()
,即使我得到异步响应,我的应用程序也会冻结。我读到,函数GetRequestStream()
立即尝试与服务器通信。我找到了函数BeginGetResponse()
,但是我不明白如何使用它。
有人可以解释一下它是如何工作的吗?如何异步写入post数据?
我想写这样的函数(不管我要写多少其他私有函数):
public delegate void ReceiveFunc(HttpWebResponse response);
public static void sendRequest(string url, HttpWebRequest request, string content, ReceiveFunc callback)
// Return response back to callback
谢谢。
【问题讨论】:
查看HttpClient
类和async-await
关键字。它会让你更轻松。
GetRequestStream()
不是异步操作。
@YuvalItzchakov 是对的:HttpClient
更易于使用。但如果您是 C# 新手,我强烈建议您先阅读 async/await
。
谢谢大家,我会研究一下那门课,看起来不错。如果您将其写为答案,我将其标记为该问题的答案。
好吧,HttpClient
类不存在。发生了什么事?
【参考方案1】:
假设您使用的是 C# 5.0,您应该将新的 async-await
关键字与异步函数一起使用。
你可以使用Stream s = await request.GetRequestStreamAsync()
代替GetRequestStream()
当您想异步接收响应时,您会调用:
HttpWebResponse response = await request.GetResponseAsync()
这将使您的生活比使用带有 Begin 和 End 函数的旧回调方法更轻松。
请记住,无论您在何处使用 await
关键字,函数都必须标记为 async
这是关于使用 async-await 关键字的 MSDN 文章:https://msdn.microsoft.com/en-us/library/hh191443.aspx
【讨论】:
以上是关于通过 http 异步发送数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用异步http post从android studio发送数据到xampp并在真实设备中运行?
异步 XMLHttpRequest send() 在所有数据发送之前返回?