通过 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并在真实设备中运行?

Redux中发送异步请求获取数据

异步 XMLHttpRequest send() 在所有数据发送之前返回?

使用AJAX技术发送异步请求,HTTP服务端推送

如何从 Django 发送异步 HTTP 请求并在 python2.7 中等待结果?

同步请求和异步请求的区别(理解ajax用)