简述:
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。