如何使BeginGetRequestStream和BeginGetResponse真的异步?

时间:2015-01-08 08:38:39

标签: .net asynchronous httpwebrequest synchronous

我正在开发一个工业网络模块,它必须异步登录到Web服务器,然后发送小数据请求。 首先,我发送一个GET请求来接收会话cookie,然后发送一个带有UN和PW的POST请求。 我想使用HttpWebRequest类中的BeginGetRequestStream和BeginGetResponse方法。但是,如果您从下面的MSDN中读取引号,则会提到某些部分不是异步的。

我应该如何处理这个问题的最佳方法?我是否应该完全避免使用这些方法,或者我应该构建一个故障安全机制,以便在方法花费很长时间时才会跳过代码(如果可能的话)? 编码工作不是问题,重要的是确保我的模块真正异步并且永远不会阻止主程序。

谢谢!

  

BeginGetRequestStream方法需要一些同步设置任务   完成(DNS解析,代理检测和TCP套接字   连接,例如)此方法变为异步之前。作为一个   结果,永远不应该在用户界面(UI)上调用此方法   线程,因为它可能需要相当长的时间(最多几分钟)   根据网络设置)完成初始同步   在抛出错误的异常或方法之前设置任务   成功。

     

BeginGetResponse方法需要一些同步设置任务   完成(DNS解析,代理检测和TCP套接字连接,   例如)此方法变为异步之前。结果是,   永远不应该在用户界面(UI)线程上调用此方法   因为它可能需要相当长的时间(最多几分钟)   根据网络设置)完成初始同步   在抛出错误的异常或方法之前设置任务   成功。

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,我会使用HttpClient,然后您可以使用async-await。这是一个例子

private async Task DownloadUrlAsync(string url)
{
    HttpClient httpCLient = new HttpClient();
    textBox1.Text = await httpCLient.GetStringAsync(url);
}