[C#] 异步处理请求

我在这写一种我遇到的情况:
当一个页面有两个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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值