【发布时间】:2015-01-08 08:38:39
【问题描述】:
我正在开发一个工业网络模块,该模块必须异步登录到网络服务器,然后发送小的数据请求。 首先我发送一个 GET 请求来接收会话 cookie,然后发送一个带有 UN 和 PW 的 POST 请求。 我想使用 HttpWebRequest 类中的 BeginGetRequestStream 和 BeginGetResponse 方法。但是,如果您阅读下面 MSDN 的引文,它会提到某些部分不是异步的。
我应该如何以最好的方式处理这个问题?我应该完全避免使用这些方法,还是应该建立一个故障安全机制,以便万一这些方法花费很长时间,代码就会跳过(如果这甚至可能的话)? 编码工作不是问题,重要的是确保我的模块真正异步并且永远不会阻塞主程序。
谢谢!
BeginGetRequestStream 方法需要一些同步设置任务 完成(DNS 解析、代理检测和 TCP 套接字 连接,例如)在此方法变为异步之前。作为一个 因此,永远不应在用户界面 (UI) 上调用此方法 线程,因为它可能需要相当长的时间(最多几分钟 取决于网络设置)完成初始同步 在抛出错误异常或方法之前设置任务 成功。
BeginGetResponse 方法需要一些同步设置任务以 完成(DNS 解析、代理检测和 TCP 套接字连接, 例如)在此方法变为异步之前。因此, 永远不应在用户界面 (UI) 线程上调用此方法 因为这可能需要相当长的时间(最多几分钟 取决于网络设置)完成初始同步 在抛出错误异常或方法之前设置任务 成功。
【问题讨论】:
-
你为什么不使用
HttpClient?它完全是async,它支持基于任务的编程模型 -
哦,谢谢你的信息。有没有更完全不同的方法?在我投入大量时间使用 on 方法之前,我想了解一下它们(不幸的是,我已经投入了 HttpWebRequest 的时间,但我想这也是学习 VB 的时间:)
-
例如,Await 和 Async 呢?
标签: .net asynchronous httpwebrequest synchronous