在今天做的小项目中
用户登录成功后要访问另一个应用的一个url,只是get过去。
首先想到用HttpWebRequest去直接GetResponse()就OK了
但这里会有一个问题:如果另一个应用的响应时间过慢或网络响应过慢,直接会导致登录时会卡一下。
可以完全使用HttpWebRequest的异步方法获取响应
class HttpAsynGet
{
public HttpAsynGet(string url)
{
this.Url = url;
request = (HttpWebRequest)WebRequest.Create(Url);
}
public string Url
{
get;
set;
}
private HttpWebRequest request;
public HttpWebRequest Request
{
get
{
return request;
}
}
public void DO()
{
request.BeginGetResponse(ProcessResponse, this);
}
private void ProcessResponse(IAsyncResult ar)
{
HttpAsynGet item = (HttpAsynGet)ar.AsyncState;
using (HttpWebResponse response = (HttpWebResponse)item.request.EndGetResponse(ar))
{
if (response.StatusCode == HttpStatusCode.OK)
{
Console.WriteLine(response.ContentLength);
Console.WriteLine(new string('=', 20));
}
else
{
Console.WriteLine(response.StatusDescription);
}
this.request.Abort();
}
}
}
调用:
HttpAsynGet get = new HttpAsynGet("xxxxxx");
get.DO();
即可。
在.Net FrameWork的一些类中,只要有以Begin..../End....开头的方法说明该类的这些方法支持异步操作。