---.Net Framework 升级至4.5+

需要执行异步操作的方法 函数签名前加上 async 标示  标示这是一个异步方法

 public async void Show(String Name)//异步方法
        {
            await InvokeFuncShow("i2");//执行异步操作   InvokeFuncShow异步操作的基本实现
        }

在异步方法内执行异步操作

当一系列操作中出现await时  则所有await后的操作都会等待await执行完成之后再继续

 Console.WriteLine("0000000000000000000000000000000000000");
            InvokeFuncShow("i1");
            Console.WriteLine("1111111111111111111111111111111111111");
            await InvokeFuncShow("i2");//执行异步操作   InvokeFuncShow异步操作的基本实现
            Console.WriteLine("222222222222222222222222222222222222222222");
            InvokeFuncShow("i3");
            Console.WriteLine("33333333333333333333333333333333333333");
            await InvokeFuncShow("i4");
            Console.WriteLine("4444444444444444444444444444444444444444");

  执行会出现

 

其中i1与i2同步执行 但是i3i4需要等到i2完全执行完成之后方会执行

然后是异步操作的具体实现需要用 Task.Run(Func<>)来完成

 public async Task InvokeFuncShow(String Name)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(
                   await Task.Run(() =>
                    {
                        var Sleep = new Random(Guid.NewGuid().GetHashCode()).Next(1, 500);
                        System.Threading.Thread.Sleep(Sleep);
                        return Name + "|||" + DateTime.Now + "|||" + Sleep + "|||" + i;
                    }));
            }
        }

  

总结起来看 就是

async Task<T> _Func    //函数名 需要async修饰
        {
           return  await Task.Run(() =>    //具体实现 
                    {
                       return T;
                    }));
            }
        }

  

完整Code

        public async void Show(String Name)//异步方法
        {
            Console.WriteLine("0000000000000000000000000000000000000");
            FuncShow("i1");
            Console.WriteLine("1111111111111111111111111111111111111");
            await FuncShow("i2");//执行异步操作   InvokeFuncShow异步操作的基本实现
            Console.WriteLine("222222222222222222222222222222222222222222");
            FuncShow("i3");
            Console.WriteLine("33333333333333333333333333333333333333");
            await FuncShow("i4");
            Console.WriteLine("4444444444444444444444444444444444444444");
        }
        public async Task FuncShow(String Name)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(
                   await Task.Run(() =>
                    {
                        var Sleep = new Random(Guid.NewGuid().GetHashCode()).Next(1, 500);
                        System.Threading.Thread.Sleep(Sleep);
                        return Name + "|||" + DateTime.Now + "|||" + Sleep + "|||" + i;
                    }));
            }
        }
        public Task<String> TaskFunc(String Name, Int32 i)
        {
            return Task.Run(() =>
            {
                var Sleep = new Random(Guid.NewGuid().GetHashCode()).Next(1000, 5000);
                System.Threading.Thread.Sleep(Sleep);
                return Name + "|||" + DateTime.Now + "|||" + Sleep + "|||" + i;
            });
        }

  main函数中调用

  new AsyncFunc().Show("");
            //   new AsyncFunc().Show("");
            Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
            Console.ReadLine();

  执行

 

--以上