• .NET 4.5新关键字async和await:


    .NET 4.5已经发布有段时间了,伴随着而来的是大量的新特性,METRO风格应用程序,MVC4,EF5,等等,其中async/await关键字无疑是其中最亮的部分之一,堪比2.0的泛型,3.0的3W和LINQ,4.0的dynamic。

    因为刚刚开始学习C#4.5新特性,所以理解也不透彻,仅仅是了解用法而已。

    async关键字用来标记在Calling方法上,表示该方法内部将调用一个异步方法,并且该内部异步方法必须使用await进行标记。简单地看代码。

            static void Main(string[] args)
            {
                ShowMessage();
    
                Console.ReadLine();
            }
    
            static void ShowMessage()
            {
                System.Threading.Thread.Sleep(2000);
                Console.WriteLine("Hello World!");
            }

    上面的Show方法,因为方法体执行时间较长(Thread.Sleep(int)),必将阻塞主线程,冻结用户界面。

    那么,用最新的异步编程方法如何避免这样的情况呢?

            static void Main(string[] args)
            {
                ShowMessage();
    
                Console.ReadLine();
            }
    
            static async void ShowMessage()
            {
                await Task.Run(()=>System.Threading.Thread.Sleep(2000));
                Console.WriteLine("Hello World 1!");
            }

    如上,只需要在需要长时间执行的方法体上加上async关键字,然后在内部被调用的实际作业方法上加上await关键字,并使用Task.Run(Action)的方式包装实际作业方法即可。

    那么,实际执行的过程如何呢?

    系统在遇到async关键字时,并不做任何事情,代码继续同步执行,直到真正地遇到await关键字。在遇到await之后,系统利用线程池的线程异步执行被修饰的方法,并在await之后立即返回主线程,主线程继续执行,无需阻塞等待。等到await修饰的异步方法执行完毕后,主线程再切换回await,执行其后剩余的代码。

    简单一句话:我们平常见到的程序大多是线性的,从上而下依次执行代码;而async/await关键字修饰的方法中,依然是线性自上而下执行,遇到await关键字后,跳出async标记的方法,让系统自动去执行async中剩余代码,这样,我们就可以不用关心多线程和来回切换的问题,专注于主要线程。

  • 相关阅读:
    什么是tomcat集群?
    cmd黑客入侵命令大全
    Linix基本命令
    Windows CMD命令大全
    python 函数1
    Python 集合(set)使用
    python 数据字典应用
    python 数据运算
    python 数据类型(元组(不可变列表),字符串
    python 数据类型(列表)学习笔记
  • 原文地址:https://www.cnblogs.com/kennywangjin/p/2672115.html
Copyright © 2020-2023  润新知