我在这写一种我遇到的情况:
当一个页面有两个table的情况下,异步查询两张表:
其中一张表内容已经查询出来并且可以点击查看详情,不会因为另一张表数据还未查询出来,而无法查看详情。
ashx采用继承 接口IHttpAsyncHandler,相关代码如下:
这边是自己写的方法,相当于中间方法
public abstract class HttpAsyncHandler:IHttpAsyncHandler
{
readonly Action<HttpContext> _processRequestDel;
/// <summary>
/// 多次请求是否可以重用实例。默认true
/// </summary>
public bool IsReusable = true;
protected HttpAsyncHandler()
{
_processRequestDel = ProcessRequest;
}
/// <summary>
/// 处理请求
/// </summary>
//以下接口方法,让继承这个接口的方法有写逻辑的地方
public abstract void ProcessRequest(HttpContext context);
//利用ProcessRequest委托的异步能力
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
{
System.Threading.Thread.Sleep(3000);
return _processRequestDel.BeginInvoke(context, cb, extraData);
}
//虽然不End也不会导致异步还没跑完就返回响应(HttpApplication的实现似乎保证这一点),
//但异步中抛出的异常会被忽略,所以需要End暴露问题
public void EndProcessRequest(IAsyncResult result)
{
_processRequestDel.EndInvoke(result);
}
#region IHttpHandler 成员
bool IHttpHandler.IsReusable
{
get { return IsReusable; }
}
#endregion
}
写逻辑的ashx
public class Handler : HttpAsyncHandler // 替掉IHttpHandler
{
//加上override
public override void ProcessRequest(HttpContext context)
{
//在这里写逻辑
}
}
这里是引用 https://www.cnblogs.com/ahdung/archive/2018/05/18/9055959.html