C# async await
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相关推荐
- setTimeout、setInterval、promise、async/await的顺序详解(多种情况,非常详细~)
本文很长,列举的情况很多. 在阅读本文之前,如果您有充足的时间,请新建一个项目与本文一同实践. 每段代码都有对应的解释,但是自己动手尝试印象才会更深哦~ setInterval:表示多久执行一次,需要 ...
- C# async await 学习笔记2
C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html) 提到了ThreadId是一样的,突然想到在WinForm中,非UI线程 ...
- promise 和 async await区别
什么是Async/Await? async/await是写异步代码的新方式,以前的方法有回调函数和Promise. async/await是基于Promise实现的,它不能用于普通的回调函数. as ...
- angular2 学习笔记 ( Rxjs, Promise, Async/Await 的区别 )
Promise 是 ES 6 Async/Await 是 ES 7 Rxjs 是一个 js 库 在使用 angular 时,你会经常看见这 3 个东西. 它们都和异步编程有关,有些情况下你会觉得用它们 ...
- async await:比requests 更强大
最近公司 Python 后端项目进行重构,整个后端逻辑基本都变更为采用"异步"协程的方式实现.看着满屏幕经过 async await(协程在 Python 中的实现)修饰的代码,我 ...
- @async 默认线程池_.NET Web应用中为什么要使用async/await异步编程?
布莱恩特:.NET Core开发精选文章目录,持续更新,欢迎投稿!zhuanlan.zhihu.com 前言 1.什么是async/await? await和async是.NET Framework ...
- Atitit. Async await 优缺点 异步编程的原理and实现 java c# php
Atitit. Async await 优缺点 异步编程的原理and实现 java c# php 1. async & await的来源1 2. 异步编程history1 2.1. 线程池 2 ...
- 8张图让你一步步看清 async/await 和 promise 的执行顺序
2019独角兽企业重金招聘Python工程师标准>>> **摘要:**面试必问 原文:8张图帮你一步步看清 async/await 和 promise 的执行顺序 作者:ziwei3 ...
- 用 async/await 来处理异步
引用出处:https://www.cnblogs.com/SamWeb/p/8417940.html 昨天看了一篇vue的教程,作者用async/ await来发送异步请求,从服务端获取数据,代码很简 ...
- 关于C#中async/await中的异常处理(上)
关于C#中async/await中的异常处理(上) 参考文章: (1)关于C#中async/await中的异常处理(上) (2)https://www.cnblogs.com/sunjie9606/p ...
最新文章
- pypy解释器提高python的效率之安装pypy
- java学习笔记(十一)基本数据类型的对象包装类
- 数学建模——层次分析法Python代码
- QT制作音乐播放器的相关知识点
- jdk1.8 源码分析导图
- PLSQL Developer 运用Profiler 分析存储过程性能
- 浅谈Python-IO多路复用(select、poll、epoll模式)
- 【优化算法】鸽群优化算法(PIO)【含Matlab源码 1077期】
- matlab小波包分析,小波分析及小波包分析
- Web全栈工程师基本素养
- 我走进了微缩的“物联国”
- linux设备模型详解
- 5G通信技术及技术特点
- 【C++】链表及基本操作
- smarty中文帮助文档
- linux 指定cpu运行线程,关于linux:如何查看运行线程的CPU核心?
- PHPCMS留言板制作
- 《世界因你而不同-李开复自传》读书笔记(2/3)
- SolidWorks Composer居然可以让医疗设备的开发时间缩短60%?!
- 键盘上使用计算机重启,我终于找到了如何使用键盘和鼠标重新启动计算机
热门文章
- System Verilog 线程间的通信——事件,信箱与旗语
- python如何快速登记凭证_如何高效地翻凭证?
- Redis和Memcached在功能、性能以及内存使用效率上的对比
- 基于windows server 2008 web服务器的性能,使用Windows Server 2008 R2理由_服务器评测与技术-中关村在线...
- 传感器 倾斜角 android,android – 如何使用sensor / s获得手机的角度/度数?
- Java多线程(一)——多线程实现方法和生命周期
- WebAPI——cookie与session遇到的问题
- 使用sql语句向SDO_Geometry插入要素
- 一、kafka安装下载与kafka初步应用
- 执行 Python 程序的三种方式及Python 的 IDE —— `PyCharm`