码迷,mamicode.com
首页 > 其他好文 > 详细

[Async]Async,Await基本

时间:2016-07-29 21:11:00      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

---.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();

  执行

技术分享

 

--以上

[Async]Async,Await基本

标签:

原文地址:http://www.cnblogs.com/ikus/p/5719427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!