如果没有互联网连接,GetRequestStream()将冻结
本文关键字:冻结 GetRequestStream 互联网 连接 如果没有 | 更新日期: 2023-09-27 18:02:24
我已经成功地生成了一个异步web请求并为它设置了超时。然而,连接的设置仍然在UI线程上,如果没有互联网连接,它似乎冻结在GetRequestStream
上。如何解决这个问题?
private WebRequest getPostLoginRequest (string username, string password)
{
string postData = string.Format (@"<login><user>{0}</user><password>{1}</password></login>", username, password);
byte[] buf = Encoding.UTF8.GetBytes (postData);
var request = HttpWebRequest.Create (String.Format (@"{0}/auth/", baseServiceUrl));
request.Method = "POST";
request.ContentType = "application/xml";
request.ContentLength = buf.Length;
request.GetRequestStream ().Write (buf, 0, buf.Length);
return request;
}
HttpWebRequest.GetRequestStream()
创建到远程服务器的网络连接,因此它可以阻塞使用BeginGetRequestStream()
。
GetRequestStream ()
的实现实际上只是BeginGetRequestStream ()
/EndGetRequestStream()
的一个薄包装:https://github.com/mono/mono/blob/master/mcs/class/System/System.Net/HttpWebRequest.cs#L816
在WebRequest.Create()
中没有可能阻塞的东西,所以从UI线程调用它是安全的。