委托
委托是什么?
使用委托可以将方法变成参数传递.委托是一种特殊类型的对象,其特殊之处在于委托中包含的只是一个活多个方法的地址,而不是数据。
委托本质上是一个class.继承自:system.MulticastDelegate
Invoke(); 相当于把方法执行了一遍
BeginInvoke(); 启动线程
触发你的异步方法,它和你想要执行的异步方法有相同的参数。另外还有两个可选参数,第一个是AsyncCallback委托是异步完成的回调方法。第二个是用户自定义对象,该对象将传递到回调方法中。BeginInvoke立即返回并且不等待完成异步的调用(继续执行该下面的代码,不需要等待)。
EndInvoke(); 等待线程的结束
BeginInvoke返回IAsyncResult接口,可用于检测异步调用的过程。
检测异步调用的结果。如果异步调用尚未完成,EndInvoke将阻塞调用线程,直到它完成。EndInvoke参数包括out和ref参数。
不管怎么么样,调用了beginInvoke ,就必须调用endInvoke 结束异步,
为什么需要委托?
逻辑解耦,代码复用,多线程必备
委托声明
1. delegate 至少0个参,之多32个参,可以有返回也可以没有
public delegate void methodDelegate(); // 无参,无返回
public delegate int methodIntDelegate(); // 无参,有返回
public delegate string methodStrDelegate(int type, string name); // 有参,有返回
2. action 无返回的泛型委托, 至少0个参,之多16个参,无返回值
action <int,string> 参数:int,string,无返回
3.Func 有返回值的泛型委托 至少0个参,之多16个参,必须有返回值
func<string> //返回为string
func<string,int>//返回int
4. predicate 返回bool型的泛型委托, 有且只有一个参数,返回固定为bool
predicate<string> // 入参string,返参bool