[Async]Async,Await基本

---.Net Framework 升级至4.5+dom

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

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

在异步方法内执行异步操做async

当一系列操做中出现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");

  执行会出现ui

 

其中i1与i2同步执行 可是i3i4须要等到i2彻底执行完成以后方会执行spa

而后是异步操做的具体实现须要用 Task.Run(Func<>)来完成3d

 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;
                    }));
            }
        }

  

总结起来看 就是blog

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函数中调用it

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

  执行

 

--以上

相关文章
相关标签/搜索