委托的异步调用

委托的概念,百度里是这样说的,“委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性”。简单来说就是把方法当作参数进行传递。这里只是略微的提下,不多做解释,典型的事例就是winform里面button控件的onclick事件方法,如果有需要,可能从这里入手,网上有很多对于这方面的详细讲解。
我们这里主要说的委托的异步调用,在日常工作中,执行一个业务流程之后,很多时候需要其他后续操作(例:修改记录状态等),如果是普通的业务还好,但如果是一个耗时较长的业务,我们就不可能直接等待他处理完成后在进行后续操作,这时很多人会想到使用线程和线程池(Thread,ThreadPool),这样就可以直接将业务交付给线程处理,这样看起来确实也没什么问题,但是在某些场景下可能不太适用,或者说比较难以实现,比较常见的一个实例就是微信支付接口,做过微信支付的人基本都知道,主要就是一个发起支付的申请事件和一个支付完成的回调事件,发起和回调是分开,这样就不可能简单的使用线程去实现,因为你并不知道发起之后几时才需要去回调,简单来说就是你无法获取他支付完成后的状态,这时,委托的异步调用就派上用场了,下面例子只是简单的模拟委托的异步调用,实际支付并不是如此简单,请大家理解

        //声明委托
        public delegate bool payDelegate();
        
        //对应委托方法
        public bool payApply()
        {
        	//提交申请的相关业务
        }
        
        //回调方法
        private void payCallBack(IAsyncResult ar)
        {
            AsyncResult asyncResult = (AsyncResult)ar;
            payDelegate paydg = (payDelegate)asyncResult.AsyncDelegate;
            bool result =  paydg.EndInvoke(ar);    //获取对应委托方法的返回值 
            //回调需要执行的方法 
            if(result)
            {
                 //成功执行的业务
            }
        }
        
        private void pay()
        {
        	payDelegate paydg = new  payDelegate(payApply);
        	AsyncCallback callBack = new AsyncCallback(payCallBack);
        	paydg.BeginInvoke(callBack,null);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值