zoukankan      html  css  js  c++  java
  • Intern Day20

    async和await介绍

    async和await是 C# 的语法糖,作用:用来处理异步编程(用来简化异步编程模型)。

    同步概念

    概念:多个方法顺序执行,后一个会等待前一个执行完成后,才开始执行。

    异步概念

    概念:调用一个方法 A ,调用后会立即返回(不用等方法 A 执行完成),接着调用后面的方法 B。比如:电脑是A,喝水是B,我在电脑开机的时候可以去喝水,不用等电脑开完机再去喝。

    一般我们需要异步的地方都是在进行比较耗时的操作,比如说磁盘IO、网络IO,当以同步的方式调用系统API进行磁盘读取或者获取网络数据的时候,线程会阻塞在那里等待什么事也干不了,直到操作系统从底层返回IO数据。异步模式就是在执行耗时IO API的时候线程不等待结果而是直接返回并注册一个回调函数,当操作系统完成耗时操作的时候,调用回调函数通知你IO结果。

    异步解决的问题

    1. 在 Winform 等富客户端程序中可以让 UI 线程避免阻塞

    2. 高效处理 IO 密集型任务和 CPU 密集型任务

    3. 处理执行时间比较长的操作(比如:文件转换等)

    实现异步的方式

    1. .NET 2.0用BeginInvoke、EndInvoke和回调的方式实现

    2. 将一些耗时的操作写成同步的方法,然后起一个新的线程或Task进行调用

    3. 使用 async 和 await 的异步编程模型

    4. 使用消息队列

    async和await用法

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("start");
            TestAsync();
            Console.WriteLine("end");
            Console.ReadLine();
        }
    
        static async void TestAsync()  // 方法添加async标识符
        {
            await Task.Delay(3000);
            Console.WriteLine("***");
        }
    }
    

    输出:

    start
    end
    ***
    

    async标识符

    1. async只是表明这个方法中可能有异步调用,并不能表示这个方法就是异步方法

    2. async是一个专门给编译器的提示,说明该函数的实现可能会出现await

    3. async唯一的用处:给await提供上下文,做向下兼容的

    4. 如果函数被标记为async,函数体内部的await才会被解释成关键字,而不会当成是一个函数,所以说当方法中有使用await关键字调用异步方法,所在的方法必须使用async

    5. async不是函数声明的一部分,仅仅是一个标识符,从调用者的角度来看,不存在async

    6. 在方法的内部使用await关键字,只要是返回Task对象的方法就可以使用await,如果没有await,那么有async标识符的方法就相当于是一个同步方法

    参考

    https://blog.csdn.net/young_sam/article/details/106680204

    https://www.cnblogs.com/deng-jie/p/12703209.html

  • 相关阅读:
    (转) 理解Angular中的$apply()以及$digest()
    Gulp 有用的地址
    AngularJS中Directive指令系列
    让博客园博客中的图片支持fancybox浏览
    Drupal7 实现like(点赞)功能
    Drupal7 针对特定条件才显示区块
    Windows server 2008 tomcat间歇性掉线关闭
    关于tomcat8在windows2008下高并发下有关问题的解决方案
    combotree 的简单使用2
    @responseBody 返回更多数据
  • 原文地址:https://www.cnblogs.com/OFSHK/p/14504111.html
Copyright © 2011-2022 走看看