使用 async/ await 进行 异步 编程
一、异步函数
异步函数概念。 通常 是 指用 async 修饰 符 声明 的, 可 包含 await 表达式 的 方法 或 匿名 函数 1。 从 语言 的 视角 来看, 这些 await 表达式 正是 有意思 的 地方: 如果 表达式 等待 的 值 还不 可用, 那么 异步 函数 将 立即 返回; 当 该 值 可用 时, 异步 函数 将( 在 适当 的 线程 上) 回到 离开 的 地方 继续 执行。 此前“ 在这 条 语句 完成 之前 不要 执行 下一 条 语句” 的 流程 依然 不变, 只是 不再 阻塞。
二、异步执行的基础
异步执行模型,充斥着后续操作。即某个操作完成后会进行另外的后续操作。回调函数类似。在net 中后续操作理所应当由委托表示,且通常为接收异步操作结果的action。实际上,C#编译器会对所有的await都构建一个后续操作;
在C#5中,异步的操作流程大致分为以下流程:
1、执行 某些 操作。
2、开始 异步 操作, 并 记住 返回 的 token。
3、可能 会 执行 其他 操作。( 在 异步 操作 完成 前, 往往 不能 进行 任何 操作, 此时 忽略 该 步骤。)
4、等待 异步 操作 完成( 通过 token)。
5、执行 其他 操作。
6、完成。
两个: async 是在 声明 异步 方法 时 使用 的 修饰 符, await 表达式 则 负责 消费 异步 操作。
三 、详细内容讲解
1.声明异步方法:方法最好包含async关键字,async可以出现在返回类型之前的任何位置;
2、异步方法的返回类型:调用者和异步方法之间是通过返回值来通信的,异步方法的的返回类型只能为:
void、Task、Task<Result>....
.NET 4 中的 Task 和 Task< TResult> 类型 都 表示 一个 可能 还未 完成 的 操作。 Task< TResult> 继承 自 Task。 二者 的 区别 是, Task< TResult> 表示 一个 返回 值 为 T 类型 的 操作, 而 Task 则 不需要 产生 返回 值。
之所以 将 异步 方法 设计 为 可以 返回 void, 是 为了 和 事件 处理 程序 兼容。
对于一个异步方法,只有在作为事件订阅者时才能返回void。在其他需要忒定返回值的情况下,最好将方法声明为Task。
3.可等待模式
使用 async/ await 进行 异步 编程的更多相关文章
- [.NET] 利用 async & await 的异步编程
		
利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html 目录 异步编程的简介 异 ...
 - 利用 async & await 的异步编程
		
走进异步编程的世界 - 开始接触 async/await 利用 async & await 的异步编程 async 的三大返回类型 公司技术需求备忘录
 - Atitit. Async await 优缺点 异步编程的原理and实现 java c# php
		
Atitit. Async await 优缺点 异步编程的原理and实现 java c# php 1. async & await的来源1 2. 异步编程history1 2.1. 线程池 2 ...
 - 用 Python 3 的 async / await 做异步编程
		
前年我曾写过一篇<初探 Python 3 的异步 IO 编程>,当时只是初步接触了一下 yield from 语法和 asyncio 标准库.前些日子我在 V2EX 看到一篇<为什么 ...
 - [.NET] 利用 async & await 进行异步 IO 操作
		
利用 async & await 进行异步 IO 操作 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6082673.html 序 上次,博主 ...
 - 使用 Async 和 Await 的异步编程(C# 和 Visual Basic)[msdn.microsoft.com]
		
看到Microsoft官方一篇关于异步编程的文章,感觉挺好,不敢独享,分享给大家. 原文地址:https://msdn.microsoft.com/zh-cn/library/hh191443.asp ...
 - 【转】【C#】C# 5.0 新特性——Async和Await使异步编程更简单
		
一.引言 在之前的C#基础知识系列文章中只介绍了从C#1.0到C#4.0中主要的特性,然而.NET 4.5 的推出,对于C#又有了新特性的增加--就是C#5.0中async和await两个关键字,这两 ...
 - 使用Async和Await进行异步编程(C#版 适用于VS2015)
		
你可以使用异步编程来避免你的应用程序的性能瓶颈并且加强总体的响应.然而,用传统的技术来写异步应用是复杂的,同时编写,调试和维护都很困难. VS2012介绍了简单的方法,那就是异步编程,它在.Net F ...
 - 使用Async和Await进行异步编程(C#版 适用于VS2015) z
		
你可以使用异步编程来避免你的应用程序的性能瓶颈并且加强总体的响应.然而,用传统的技术来写异步应用是复杂的,同时编写,调试和维护都很困难. VS2012介绍了简单的方法,那就是异步编程,它在.Net F ...
 
随机推荐
- smarty 3 + codeigniter 2 + hmvc
			
参考资料 https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/src/fecd39ccdf56?at=defau ...
 - 熟悉VS2017 和Github 第二次作业
			
GIT地址 https://github.com/Astone1213 GIT用户名 Astone1213 学号后五位 62114 博客地址 https://www.cnblogs.com/AsL ...
 - springboot-注解讲解
			
@Configuration:声明我们JdbcConfig是一个配置类 @PropertySource:指定属性文件的路径是:classpath:jdbc.properties 通过@Value为属性 ...
 - python tips: for循环的小问题
			
在python中,用for对列表进行遍历的时候,迭代器中维护的是列表的索引而不是列表的元素.也就是说,for循环是对索引进行迭代,如果在for循环过程中修改了列表,迭代出来的值是新列表的索引位置,如果 ...
 - centos7 redmine安装过程(转载)
			
redmine 部署过程 redmin官方文档写的太烂加上不熟悉ruby搞了半天,回到家后觉得还是记录下好,希望可以帮助有需要的人,少走弯路. 版本说明 下面的版本很重要redmine 版本 3.3 ...
 - CSS背景图怎么自适应全屏(手机或者电脑)
			
#demo{ background-img:url(../bg.png); --(1)适用于上半部分背景图片,下半部分纯色 将背景图像等比缩放到完全覆盖屏幕,背景图有可能超出屏幕(容器) backgr ...
 - IOS开发:使用lipo合并armv7,i386,armv7s库文件
			
假设多个版本的lib分别是 libxxx.armv7.a , libxxx.armv7s.a, libxxx.i386.a我们的目标是 把他们合并成超级通用版的libxxx.a 打开命令行 Term ...
 - HDU1079-Calendar Game 简单思维博弈··
			
题意:给你1990,1.1----2001.11.4范围内的某一天,格式year month day 两人轮流操作: 1. day+1; 2.month + 1: 谁先达到2001.11.4号,谁获 ...
 - ZooKeeper概念
			
这可能是把ZooKeeper概念讲的最清楚的一篇文章 相信大家对 ZooKeeper 应该不算陌生,但是你真的了解 ZooKeeper 是什么吗?如果别人/面试官让你讲讲 ZooKeeper 是什么, ...
 - FFMpeg 常用命令格式转换,视频合成
			
FFmpeg都是命令行的,用起来肯定不方便.但是,这对技术宅应该不成问题.下面,我就罗列一些比较实用的使用方法吧. FFmpeg的下载与安装 FFmpeg是开源的.但我们不必去下载它的源代码.下载已经 ...