1.c#的异步实现,以前代码编写大都开几个线程。c#
现能够使用“async+await”方式实现异步(具体不详细介绍,暂且止在会用,仅仅是c#更新史上一个工具):异步
static void Main(string[] args) { method1(); method2();//不会等待method1执行结束,再执行method2 Console.ReadKey(); }//结果输出是"method 1"和"method 2"字符串交替出现,但不会严格按照1:1交替出现 private static async Task method1()//必须使用task或task<T>作返回 { await Task.Run(() => { for (int i = 0; i < 100; i++) { Console.WriteLine("method 1"); } }); } private static void method2() { for (int i = 0; i < 25; i++) { Console.WriteLine("method 2"); } }
2.委托函数async
旧的使用方法:须要先定义委托类型,而后定义一个符合委托类型签名的函数,
在调用前,需声明并建立委托对象,将指定函数与委托进行关联。函数
public delegate int Math(int param1,int param2);定义委托类型 Public int Add(int param1,int param2)//定义同签名函数 { Return param1+param2; } Math math;//声明委托 math=new Math(Add);建立委托对象,与指定进行关联 math(3,4);//调用委托函数
如今能够使用内置委托类型:工具
Func<int,int,int> math=Add;//指定委托对象并关联函数 math(3,4);//调用委托函数
Action委托具备Action<T>、Action<T1,T2>、Action<T1,T2,T3>……Action<T1,……T16>多达16个的重载,其中传入参数均采用泛型中的类型参数T,涵盖了几乎全部可能存在的无返回值的委托类型。Func则具备Func<TResult>、Func<T,Tresult>、Func<T1,T2,T3……,Tresult>17种类型重载,T1……T16为出入参数,Tresult为返回类型。线程
既然是委托类型,也一样能够与匿名函数、或者采用Lambda表达式结合使用:对象
匿名函数: Func<int,int,int> math=delegate(int param1,int param2) { Return param1+param2; } Lambda: Func<int,int,int> math=(param1,param2)=> { Return param1+param2; }
Action的使用如同上面Func的使用同样,只是缺乏了返回类型,直接调用委托函数。blog
Public void Add(int param1,int param2) { MessageBox.show((param1+param2).ToString()); } //遇到此类的委托函数调用,那咱们就能够直接用Action了: Action<int,int> math=Add; math(3,4);