当前位置:编程学习 > asp >>

多线程(2)——服务生(委托)的闪亮登场

  本来这篇博客想把委托直接交代出来的,可是又怕跟第一篇(多线程(1)——从生活中理解什么是多线程)太过于脱节,所以就让委托作为一个服务生的角色出场吧。

       在.net中,线程是要调用委托才能实现的,下面就介绍一下委托的作用。

       第一篇博客简单的介绍了多线程在生活中的映射,A、B两个服务员分别代表着两个不同的线程用来与顾客甲、乙进行交互,那么大家有没有考虑过:从A、B两个服务员给甲、乙两个顾客点完菜到顾客吃到桌子上香喷喷的菜的过程中到底发生了什么呢?

        这时候服务生的角色就该发起作用了:

 \

       如上图所示,要想使服务员点的菜能通知到厨师,并且最后把菜放在顾客的桌子上,那么服务员就需要联系“服务生(相当于.net中的一个委托变量,里面存放方法的地址)”了。大家也都知道,餐馆里有很多服务生,假设同一职责的服务生只有一位(1#传热素菜的服务生、2传热荤菜的服务生、3#传凉素菜的服务生、4#传凉荤菜的服务生……),那么服务员可以根据顾客点的菜来决定跟哪些服务生联系(这里的特定的服务生代表着委托中存放的方法)。

        上图的例子显示,服务员所联系的服务生中包括1#和3#服务生。

         那么服务员是怎样跟服务生取得联系的呢?这时候服务员记录顾客所点的菜的菜单就该发挥作用了,这是服务员与服务生之间的联系方式。服务生在收到从服务员传过来的菜单后回根据不同的菜分配任务给不同的服务生。这样之后服务生的工作方式就可以对服务员隐藏了(即服务生的工作内容不需要向服务员公开,服务员只要最后的结果即可),最后的结果就是服务生把顾客点的菜端到桌子上即可。      

         在.net中的线程也是如此,当创建好一个线程实例对象(A、B两个服务员代表两个线程实例对象)后需要调用一个委托(委托就是一个存放好多方法指针的集合,一个能存放符合某种格式即方法签名的方法指针的清单),委托变量可以指向一个方法也可以追加多个方法,每个方法之间的功能都是独立的、封装的(就好像服务生怎么做事服务员管不着一样)。这样,线程中传递了委托变量,而委托变量中指向了多个方法,最后靠方法来完成特定的功能。这里的委托变量代表着上例中的“服务生集合”(里面存放着每个符合同一规定的不同职责的服务生代号),每一个特定职责的服务生表示一个符合委托签名的方法。

          在这里需要注意的是:上面的实例中服务员与服务生间的联系需要用到菜单,也就是说.net中定义委托的方法签名必须是有参的,而餐单就是这个参数,用来传递数据。

 作者“阴慧超”
 

补充:Web开发 , ASP.Net ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,