1:主线程遇到 await/return 就返回

2:主线程碰到await后会立刻返回,以非阻塞的形式执行后面的代码

3:使用 async 修饰符可将方法、lambda 表达式或匿名方法指定为异步,在用async修饰符的表达式/方法的返回值必须是 void, Task或者Task<T>,T是返回值的类型。如果没有返回值则用Task/void。

4: 在Task对象前面用 await会阻塞线程,直到Task中的异步操作结束,并返回结果。程序才会继续执行。

5: await在等待task的时候实际上是调用的task.GetAwaiter().GetResult(), 这个函数会进行阻塞函数,直到task 运行结束, 而利用OnCompleted(action),这是在task运行结束后直接回调用的回调函数(action)。

6:系统要执行Task的委托函数时,会开一个新的线程去执行,主线程继续执行下面的代码

using System;using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp14
{class Program{static void Main(string[] args){Console.WriteLine("Hello World!");for (int i = 0; i < 4; i++){TestAsync();} Console.ReadLine(); }static async void TestAsync(){Console.WriteLine("Test()开始, Thread Id: {0}", Thread.CurrentThread.ManagedThreadId);var name =   GetNameAsync();             var res = await name; Console.WriteLine("await GetName1: {0},IDD={1}", res, Thread.CurrentThread.ManagedThreadId);Console.WriteLine("'After await ' Thread Id: {0}", Thread.CurrentThread.ManagedThreadId); Console.WriteLine("Test()结束.\r\n");}static async Task<string> GetNameAsync(){ Console.WriteLine("GetName()开始, thread Id is: {0}\r\n", Thread.CurrentThread.ManagedThreadId);return await Task.Run(() =>{Thread.Sleep(20000);Console.WriteLine("'GetName' Thread Id: {0}", Thread.CurrentThread.ManagedThreadId);return "Jesse";});}}
}

C# async await相关推荐

  1. setTimeout、setInterval、promise、async/await的顺序详解(多种情况,非常详细~)

    本文很长,列举的情况很多. 在阅读本文之前,如果您有充足的时间,请新建一个项目与本文一同实践. 每段代码都有对应的解释,但是自己动手尝试印象才会更深哦~ setInterval:表示多久执行一次,需要 ...

  2. C# async await 学习笔记2

    C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html) 提到了ThreadId是一样的,突然想到在WinForm中,非UI线程 ...

  3. promise 和 async await区别

     什么是Async/Await? async/await是写异步代码的新方式,以前的方法有回调函数和Promise. async/await是基于Promise实现的,它不能用于普通的回调函数. as ...

  4. angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )

    Promise 是 ES 6 Async/Await 是 ES 7 Rxjs 是一个 js 库 在使用 angular 时,你会经常看见这 3 个东西. 它们都和异步编程有关,有些情况下你会觉得用它们 ...

  5. async await:比requests 更强大

    最近公司 Python 后端项目进行重构,整个后端逻辑基本都变更为采用"异步"协程的方式实现.看着满屏幕经过 async await(协程在 Python 中的实现)修饰的代码,我 ...

  6. @async 默认线程池_.NET Web应用中为什么要使用async/await异步编程?

    布莱恩特:.NET Core开发精选文章目录,持续更新,欢迎投稿!​zhuanlan.zhihu.com 前言 1.什么是async/await? await和async是.NET Framework ...

  7. Atitit. Async await 优缺点 异步编程的原理and实现 java c# php

    Atitit. Async await 优缺点 异步编程的原理and实现 java c# php 1. async & await的来源1 2. 异步编程history1 2.1. 线程池 2 ...

  8. 8张图让你一步步看清 async/await 和 promise 的执行顺序

    2019独角兽企业重金招聘Python工程师标准>>> **摘要:**面试必问 原文:8张图帮你一步步看清 async/await 和 promise 的执行顺序 作者:ziwei3 ...

  9. 用 async/await 来处理异步

    引用出处:https://www.cnblogs.com/SamWeb/p/8417940.html 昨天看了一篇vue的教程,作者用async/ await来发送异步请求,从服务端获取数据,代码很简 ...

  10. 关于C#中async/await中的异常处理(上)

    关于C#中async/await中的异常处理(上) 参考文章: (1)关于C#中async/await中的异常处理(上) (2)https://www.cnblogs.com/sunjie9606/p ...

最新文章

  1. pypy解释器提高python的效率之安装pypy
  2. java学习笔记(十一)基本数据类型的对象包装类
  3. 数学建模——层次分析法Python代码
  4. QT制作音乐播放器的相关知识点
  5. jdk1.8 源码分析导图
  6. PLSQL Developer 运用Profiler 分析存储过程性能
  7. 浅谈Python-IO多路复用(select、poll、epoll模式)
  8. 【优化算法】鸽群优化算法(PIO)【含Matlab源码 1077期】
  9. matlab小波包分析,小波分析及小波包分析
  10. Web全栈工程师基本素养
  11. 我走进了微缩的“物联国”
  12. linux设备模型详解
  13. 5G通信技术及技术特点
  14. 【C++】链表及基本操作
  15. smarty中文帮助文档
  16. linux 指定cpu运行线程,关于linux:如何查看运行线程的CPU核心?
  17. PHPCMS留言板制作
  18. 《世界因你而不同-李开复自传》读书笔记(2/3)
  19. SolidWorks Composer居然可以让医疗设备的开发时间缩短60%?!
  20. 键盘上使用计算机重启,我终于找到了如何使用键盘和鼠标重新启动计算机

热门文章

  1. System Verilog 线程间的通信——事件,信箱与旗语
  2. python如何快速登记凭证_如何高效地翻凭证?
  3. Redis和Memcached在功能、性能以及内存使用效率上的对比
  4. 基于windows server 2008 web服务器的性能,使用Windows Server 2008 R2理由_服务器评测与技术-中关村在线...
  5. 传感器 倾斜角 android,android – 如何使用sensor / s获得手机的角度/度数?
  6. Java多线程(一)——多线程实现方法和生命周期
  7. WebAPI——cookie与session遇到的问题
  8. 使用sql语句向SDO_Geometry插入要素
  9. 一、kafka安装下载与kafka初步应用
  10. 执行 Python 程序的三种方式及Python 的 IDE —— `PyCharm`