简介的异步通讯机制-委托(delegate)

用Delegate完成异步调用

  1. delegate可用于对方法的应用,它可以作为方法的参数出现,也可以作为类的成员出现,尤其在地步调用中,delegate可以定义回调方法:
     public class AsncInvoker
        {
            //记录异步执行的结果
            public IList<string> output = new List<string>();
            public AsncInvoker()
            {
                Timer slowTimer = new Timer(new TimerCallback(OnTimerInerval), "slow", 2500,2500);
    
                Timer fastTimer = new Timer(new TimerCallback(OnTimerInerval), "fast", 2500,2500);
                output.Add("method");
            }
            private void OnTimerInerval(object state)
            {
                output.Add(state as string);
            }
            public IList<string> Output { get { return output; } }
        }

     

     Unit test:

    

 [TestMethod()]
        public void test()
        {
            AsncInvoker asy = new AsncInvoker();
            Thread.Sleep(3000);
            Assert.AreEqual<string>("method", asy.Output[0]);
            Assert.AreEqual<string>("fast", asy.Output[1]);
            Assert.AreEqual<string>("slow", asy.Output[2]);
        }ow", asy.Output[2]);

 

 

在上面的例子中,TimerCallbak就是一个delegate,它定义了每个Timer触发时需要回调的方法,上面顺序先是主流程执行,跟着是两个timer快慢执行。除此之外,上例子中还表达了一个重要的意图:delegate是对具体方法的抽象,它屏蔽了delegate的调用者与实际执行方法间的关联关系。如,上面的调用者是timer,而执行着确实Asyncinvoker中中的ontimerinterval方法。很多行为模式可以采用此类操作方式表示。

转载于:https://www.cnblogs.com/corekeikei/p/5793013.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值