码迷,mamicode.com
首页 > Windows程序 > 详细

C# 5.0新推出的async和await

时间:2015-09-29 23:28:14      阅读:317      评论:0      收藏:0      [点我收藏+]

标签:

class Program
{
  static void Main(string[] args)
  {
    Test t = new Test();
  }
}
public class Test
  {
  public Test()
  {
    Console.WriteLine("调用前");
    Display();
    Console.WriteLine("调用后");
    Console.ReadKey();
  }
  private async void Display()
  {
    double d = await GetValue(10000000);
    Console.WriteLine(d);
  }
  private Task<double> GetValue(double p1)
  {
    return Task.Run(() =>
    {
      double t = 0;
      for (double i = 0; i < p1; i++)
      {
        t += p1;
      }
      return t;
    });
  }
}

这是一个控制台程序,首先看执行结果

 

技术分享

我们注意到,这个数字不是应该在,这两行文字中间出现吗,对你想的没错,他就是异步方法。

async 方法就是一个异步方法的标志

使用 async 修饰符可将方法、lambda 表达式匿名方法指定为异步。 如果对方法或表达式使用此修饰符,则其称为异步方法。--这是CSDN上给的解释

什么是异步呢?顾名思义就是不同步,async修饰的方法,将被另一个线程执行,不阻塞主线程。(这样说是不准确的,因为只有 async方法中await 后的方法才是真正另一个线程完成的,如果没有async中没有await 修饰的方法,那么这个async也是全部同步执行的)

用reflector反编译后看源码,会发现,其实所谓的await async  不过是微软给编译器用的语法糖,我们看Test类

技术分享

它里面多了一个结构:打开Display()转换成IL代码后

技术分享

然后在看这个类的Start方法

技术分享


到这基本上就明白了,它怎么个机制了吧。

C# 5.0新推出的async和await

标签:

原文地址:http://www.cnblogs.com/lxtblogs/p/4847529.html

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