首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

异步嘱托,恰似一江春水向东流(你了解的异步委托)

2012-12-18 
异步委托,恰似一江春水向东流(你了解的异步委托)书是书,你是你,照抄文字那是书本的东西,你必须有你自己理

异步委托,恰似一江春水向东流(你了解的异步委托)

书是书,你是你,照抄文字那是书本的东西,你必须有你自己理解,就算是 有错误的认识。下面说下异步委托,个人涉 .net不深,经验尚浅,如果说的不对,希望大家指出来。
??? 对于线程,我不想多说了,可以搜索博客园 风尘浪子的? "线程上与线程下",说的相当详细。本篇博文就是针对:了解一些线程但对异步委托又模糊的朋友。
其实这个异步委托,应该结合 线程Thread来一起讨论的,为什么我们现在对这个异步委托爱不释手,是因为它的3个原因:
.不影响主线程的执行
.合理的利用ThreadPool线程池的线程
.异步委托本质是调用了线程池的工作者线程,不需要为了新建和注销线程烦恼,统一由线程池管理。

1.传统的同步委托(模拟委托的方法执行时间很长)
模拟委托的方法执行很长: Thread.Sleep(TimeSpan.FromSeconds(3));

异步嘱托,恰似一江春水向东流(你了解的异步委托)异步嘱托,恰似一江春水向东流(你了解的异步委托)异步嘱托,恰似一江春水向东流(你了解的异步委托)异步嘱托,恰似一江春水向东流(你了解的异步委托)异步嘱托,恰似一江春水向东流(你了解的异步委托)View Code
//声明委托    public delegate string DeleMethod(string name);    class Program    {        static void Main(string[] args)        {            DeleMethod delemethod = Speaking;            //声明回调函数            AsyncCallback callback = new AsyncCallback(CallBack);            //执行异步委托                        delemethod.BeginInvoke("Mr.w",callback,null);            Console.WriteLine("当前线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());            //主线程方法            Console.WriteLine("下面我还要执行方法....");                      //阻止主线程退出程序            Console.ReadKey();        }        //回调方法        static void CallBack(IAsyncResult ar)        {            Console.WriteLine("当前线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());            AsyncResult result = (AsyncResult)ar;            DeleMethod delemethod = (DeleMethod)result.AsyncDelegate;//通过AsyncResult的AsyncDelegate获得delemethod委托对象            string s = delemethod.EndInvoke(ar);            Console.WriteLine(s);            Console.WriteLine("当前线程ID:"+Thread.CurrentThread.ManagedThreadId.ToString());        }        //要被委托调用的方法        static string Speaking(string name)        {                       //利用休眠3秒钟,模拟委托执行的方法很长            Thread.Sleep(TimeSpan.FromSeconds(3));            Console.WriteLine("当前线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString());            Console.WriteLine("我的名字是:{0}", name);            return "委托方法执行完毕!";        }    }
输出:当前线程ID:1下面我还要执行方法....当前线程ID:3我的名字是:Mr.w当前线程ID:3委托方法执行完毕!当前线程ID:3

热点排行