C# 5.0 新特性 async和await

1:  async和await 是 C# 5.0 的新特性

2:  需要.net Framework 4.5,或更高级版本才能使用  

3: 需要VS2012,或更高级版本才能使用

4:它是用来配合 Task.Run(()=>{   这里写代码   });来使用的,Task.Run是一个很方便的异步执行

5: 使用方法:

     在任何方法前面加关键字  async ,比如:

        public static void Main(string[] args)
        {
            Program p = new Program();
            p.Print();
            Console.ReadKey();
        }

        public async void Print()
        {
            Console.WriteLine("1111111");
            Console.WriteLine("222222");
            Console.WriteLine("33333333");
        }

   大家可以看到我在这个方法前面加了一个async,有什么用呢?然并卵,只是告诉了你这个方法变成了支持异步的方法。这个时候打印的话,结果集还是按顺序来打印

  大家还需要知道一个关键字:Task ,注意Task 才是核心,async和await只不过是用来服务Task的 ,它是Task的好基友,Task 可以轻松实现异步执行;你可以把要异步执行的东西都丢在里面,那怎么用呢?比如:

       public static void Main(string[] args)
        {
            Program p = new Program();
            p.Print();
            Console.ReadKey();
        }

        public async void Print()
        {
            Console.WriteLine("1111111");
            Task.Run(() => {
                Thread.Sleep(2000);
                Console.WriteLine("222222");
            });
            Console.WriteLine("33333333");
        }

再看看打印的结果,你会发现2222被异步执行了,先执行了11111和33333,2秒以后才出现了了222222

但是这些操作和async没有任何关系,你去掉方法的async也一样可以执行,而且结果一模一样,别急,这个时候我们再加关键字

await   ,await   必须在有 关键字 async的方法中才可使用,所以代码如下:

        public static void Main(string[] args)
        {
            Program p = new Program();
            p.Print();
            Console.ReadKey();
        }

        public async void Print()
        {
            Console.WriteLine("1111111");
            await Task.Run(() => {
                Thread.Sleep(2000);
                Console.WriteLine("222222");
            });
            Console.WriteLine("33333333");
        }

 这个时候再看看运行结果

  所以你现在理解了await的意思了吗?其实就是等待,一直等待到异步完成为止;这种需求很少吧?大多情况都用不到,但是如果有需求的话,可以用这种方式,这种比较代码比较清晰一些;当然也有更高深的运用,封装好多好多代码,这里就不说了,知道他的意思就好了。

 

另外异步的写法要写代码的话也可以这样:

//不带参数
                    Task.Run(() =>
                    {
                      //异步
                    }).GetAwaiter().OnCompleted(() =>
                    {
                      //回调
                    });



//带参数
                    Task<string> task = Task<string>.Run(() =>
                    {
                        return string.Empty;
                        //异步
                    });
                    task.GetAwaiter().OnCompleted(() =>
                    {
                        Console.WriteLine(task.Result);
                    });

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值