}
catch (WebException ex)
{
if ((HttpWebResponse)ex.Response != null)
{
statusCode = ((int)((HttpWebResponse)ex.Response).StatusCode);
}
webEx = ex;
}
//调用外部回调 即最外层的回调
tag.callback(tag.obj, retString, statusCode, webEx);
}
/// <summary>
/// 异步请求回调委托
/// </summary>
/// <param>回传对象</param>
/// <param>http响应结果</param>
/// <param>http状态码</param>
/// <param>异常</param>
public delegate void AsyRequetCallback(object asyObj, string respStr, int statusCode, WebException webEx);
/// <summary>
/// 异步返回对象
/// </summary>
class AsyResultTag
{
/// <summary>
/// 回传对象
/// </summary>
public object obj { get; set; }
/// <summary>
/// 当前httpRequest请求实例
/// </summary>
public HttpWebRequest req { get; set; }
/// <summary>
/// 回调函数委托
/// </summary>
public AsyRequetCallback callback { get; set; }
}
AsyRequetCallback 异步回调委托,即要回调的函数原型;说下每个参数的意义:
1、object asyObj:回传对象,即请求时附带的一个对象,如果没有可以不用传。比如我们当前的这个请求和用户有所关联,如当前的这个请求对应是某个用户的,请求后我要将结果写到这个用户的某个属性下面;这样我们就可以将此用户信息和当前请求一起携带过去。
2、string respStr:当前http返回结果。
3、int statusCode:http状态码,包括出错时的状态码。如404,403等。
4、WebException webEx 异常信息,异常信息也会随着回调传递到前面来,不直接向上抛或者直接log。好处在于,我们可以针对这个异常信息做单独处理。比如某个用户如果碰到什么403或者404我们应该怎么处理,又或者我们可以将错误信息随着当前用户进行保存,很好的跟踪每个用户的发送情况。