c# 异步委托的使用小结

异步委托的使用小结

异步委托的使用小结

    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
         getInfo();         
        Console.WriteLine("End!!!");
        Console.Read();
    }
    //不带返回参数的委托
    public static void getInfo()
    {
        Action<string> act = doSmoething;
        act.Invoke("111111");
         //回掉方法方式1
        // AsyncCallback callback = doSmoething2;            
        //回掉方法方式2 T为委托执行后返回到回掉方法的参数
        AsyncCallback callback = T =>
        {
            Console.WriteLine("3333333" + T);
        };
        //开始执行异步委托
        IAsyncResult isr = act.BeginInvoke("222222", callback, null);
         //异步委托的等待如果未执行完那么会一直等待
        isr.AsyncWaitHandle.WaitOne();
        //只等待两秒钟,如果未执行完那么也不继续等待
        isr.AsyncWaitHandle.WaitOne(2000);
        Action ac = doSmoething3;
        //不带参数委托的声明方式
        Action a = () =>
        {
            Console.Write("我是空参数的委托");
        };
}

    public static void doSmoething(string thing)
    {
        for (int i = 0; i < 100; i++)
        {
            Console.WriteLine($"{thing}");
        }

    }
    public static void doSmoething3( )
    {
        for (int i = 0; i < 100; i++)
        {
            Console.WriteLine($"");
        }

    }
    public static void doSmoething2(IAsyncResult thing)
    {
        for (int i = 0; i < 100; i++)
        {
            Console.WriteLine($"我是异步的学习      ,状态为 {thing.AsyncState}");
        }
    }
    //带返回值的委托
    public static void doFunc() {
    //不带参数的委托,只有返回值
        Func<string> f4 = () =>
        {
            return "";
        };
        //带参数与返回值的委托
        Func<string, int> func = b =>
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine($"1111111+++++++1111111+++++{b}");
            }
            return DateTime.Now.Year;
        };
        //声明回掉方法,t为执行完后的返回值
        AsyncCallback asyncCallback = t =>
        {
            Console.WriteLine("2222222222");
            //当进入到此方法以后说明委托方法已经执行完,已经开始返回,这时调用委托的EndInvoke传入执行完的   						
            结果获取该委托方法的返回值
            int result = func.EndInvoke(t);
            Console.WriteLine(result);
        }; 
        //调用方式1
        //func.BeginInvoke("1", asyncCallback, "");
        //调用方式2
     IAsyncResult isy =   func.BeginInvoke("555", t =>
        {
            int end = func.EndInvoke(t);
            Console.WriteLine(end);
        },
        "");
        //单独执行获取返回值时,进程会卡在这里等待委托执行完成。如果不会等待回掉全部执行完就会执行到该方
        法
        int result = func.EndInvoke(isy);
        //等待
        isy.AsyncWaitHandle.WaitOne();
    }
}

}在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xvhua4317yahoo/article/details/84066600