简述:
1、委托的同步调用通过Invoke来实现。
Invoke同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。
2、委托的异步调用通过BeginInvoke和EndInvoke来实现。
委托的异步调用不阻塞线程,而是把调用塞到线程池中,程序主线程或UI线程可以继续执行。
案例:
委托的同步方法 委托的Invoke方法用来进行同步调用,代码如下:
static void Main(string[] args){//无参数方法Action action = () => Console.WriteLine("action方法执行");action.Invoke();//有一个参数(多个参数基本相同)Action<string> action2 = (t) => Console.WriteLine("action方法执行,{0}", t);action2.Invoke("我在测试");//带一个参数带返回值Func<int, bool> func = (t) => {int i = new Random().Next(1, 10);Console.WriteLine("随机数是{0}", i);return i > t;};bool b = func.Invoke(5);Console.WriteLine("{0}",b);Console.Read();}
同步调用会阻塞线程,若是是要调用一项繁重的工做(如大量IO操做),可能会让程序停顿很长时间,形成糟糕的用户体验,这时候异步调用就颇有必要了。
委托的异步调用测试
异步调用不阻塞线程,而是把调用塞到线程池中,程序主线程或UI线程能够继续执行。委托的异步调用经过BeginInvoke和EndInvoke来实现,代码如下:
static void Main(string[] args){//无参数方法Action action = () => Console.WriteLine("action方法执行");action.BeginInvoke(null,null);//有一个参数(多个参数基本相同)Action<string> action2 = (t) => Console.WriteLine("action方法执行,{0}", t);action2.BeginInvoke("我是个测试",null,null);//带一个参数带返回值Func<int, bool> func = (t) => {int i = new Random().Next(1, 10);Console.WriteLine("随机数是{0}", i);return i > t;};var result = func.BeginInvoke(5,null,null);bool b = func.EndInvoke(result);Console.WriteLine("{0}",b);Console.Read();}
异步回调
用回调函数,当调用结束时会自动调用回调函数,解决了为等待调用结果,而让线程依旧被阻塞的局面。
static void Main(string[] args){//无参数方法Action action = () => Console.WriteLine("action方法执行");AsyncCallback callback1 = t =>{Console.WriteLine("我是回调1");};action.BeginInvoke(callback1, null);//有一个参数(多个参数基本相同)Action<string> action2 = (t) => Console.WriteLine("action方法执行,{0}", t);AsyncCallback callback2 = t =>{Console.WriteLine("我是回调2");};action2.BeginInvoke("我是个测试", callback2, null);//带一个参数带返回值Func<int, bool> func = (t) => {int i = new Random().Next(1, 10);Console.WriteLine("随机数是{0}", i);return i > t;};AsyncCallback callback3 = t =>{Console.WriteLine("我是回调3");};var result = func.BeginInvoke(5, callback3, null);bool b = func.EndInvoke(result);Console.WriteLine("{0}",b);Console.Read();}
引用:https://www.cnblogs.com/yangxi1081/p/9634678.html
版权申明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。
支持小微:
腾讯云 搞活动了?玩服务器的可以搞搞。就这几天时间。
轻量 1C2G6M 60GB SSD盘297元/3年
链接:https://curl.qcloud.com/bR8ycXZa
右下角,您点一下在看图片
小微工资涨1毛
商务合作QQ:185601686

文章转载自DotNet开发跳槽,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




