• 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);
  • 相关阅读:
    ScriptManager在客户端来调用服务器端方法或者webService的方法
    转2010 .NET面试题整理之基础篇
    .net 面试题1
    读写文件
    三种编解码方式
    vs2008快捷键
    SharePoint类库说明.NET教程,Asp.Net研发
    一道sql面试题解法
    16天学完java
    总结DataTable 导出Excel数据
  • 原文地址:https://www.cnblogs.com/gaara-zhang/p/11207033.html
Copyright © 2020-2023  润新知