c# async,await, 委托函数

1.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.委托函数

  旧的使用方法:需要先定义委托类型,然后定义一个符合委托类型签名的函数,
在调用前,需声明并创建委托对象,将指定函数与委托进行关联。

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的使用一样,只是缺少了返回类型,直接调用委托函数。

Public void Add(int param1,int param2)
{
  MessageBox.show((param1+param2).ToString());
}
//遇到此类的委托函数调用,那我们就可以直接用Action了:
Action<int,int> math=Add;
math(3,4);
原文地址:https://www.cnblogs.com/gaara-zhang/p/11207033.html