我正在开发一个工业网络模块,它必须异步登录到Web服务器,然后发送小数据请求。 首先,我发送一个GET请求来接收会话cookie,然后发送一个带有UN和PW的POST请求。 我想使用HttpWebRequest类中的BeginGetRequestStream和BeginGetResponse方法。但是,如果您从下面的MSDN中读取引号,则会提到某些部分不是异步的。
我应该如何处理这个问题的最佳方法?我是否应该完全避免使用这些方法,或者我应该构建一个故障安全机制,以便在方法花费很长时间时才会跳过代码(如果可能的话)? 编码工作不是问题,重要的是确保我的模块真正异步并且永远不会阻止主程序。
谢谢!
BeginGetRequestStream方法需要一些同步设置任务 完成(DNS解析,代理检测和TCP套接字 连接,例如)此方法变为异步之前。作为一个 结果,永远不应该在用户界面(UI)上调用此方法 线程,因为它可能需要相当长的时间(最多几分钟) 根据网络设置)完成初始同步 在抛出错误的异常或方法之前设置任务 成功。
BeginGetResponse方法需要一些同步设置任务 完成(DNS解析,代理检测和TCP套接字连接, 例如)此方法变为异步之前。结果是, 永远不应该在用户界面(UI)线程上调用此方法 因为它可能需要相当长的时间(最多几分钟) 根据网络设置)完成初始同步 在抛出错误的异常或方法之前设置任务 成功。
答案 0 :(得分:0)
正如我在评论中提到的,我会使用HttpClient
,然后您可以使用async-await
。这是一个例子
private async Task DownloadUrlAsync(string url)
{
HttpClient httpCLient = new HttpClient();
textBox1.Text = await httpCLient.GetStringAsync(url);
}