经过一番努力,我写的异步编程系列也算有头有尾,当然不是说这个系列已经更新完毕,这个头尾只是表示新旧知识点都有简单涉及到,接下去我还会丰富这一系列并且有机会整个小应用(愿景是弄一个开源组件吧,结合socket)。

术语:

APM    异步编程模型,Asynchronous Programming Model

EAP    基于事件的异步编程模式,Event-based Asynchronous Pattern

TAP    基于任务的异步编程模式,Task-based Asynchronous Pattern

TPL    任务并行库,Task Parallel Library

现在我给这个系列整个目录和做个简单介绍。

“概要 + 目录”整理

C#语言是微软于2000年发布,基于.NET Framewrok框架的、面向对象的高级语言。经过近十三年的发展,经历了5次大的升级,目前最新版本为C#5.0(对应于.NET Framework 4.5)。其中每个版本发布都是有一个“主题”。即:C#1.0托管代码→C#2.0泛型→C#3.0LINQ→C#4.0动态语言→C#5.0异步编程。这系列既是针对“异步编程”所写。

C#版本

.NET 版本

Visual Studio 版本

特性描述

C# 1.0

.NET 1.0/1.1

VS 2002/2003

C#的第一个正式发行版本。微软的团队从无到有创造了一种语言,专门为.NET编程提供支持

C# 2.0

.NET 2.0

VS 2005

C#语言开始支持泛型,.NET Framework 2.0新增了支持泛型的库

.NET 3.0

新增了一套API来支持分布式通信(Windows Communication Foundation— WCF)、富客户端表示(Windows Presentation Foundation)、工作流(Windows Workflow—WF)以及Web身份验证(Cardspaces)

C# 3.0

.NET 3.5

VS 2008

添加了对LINQ的支持,对用于集合编程的API进行了大幅改进。.NET Framework 3.5对原有的API进行了扩展,从而支持了LINQ

C# 4.0

.NET 4.0

VS 2010

添加了动态类型(dynamic)的支持,引入了新的轻量级线程同步基元及新的异步编程类库TPL

C# 5.0

.NET 4.5

VS 2012

改进并扩展了.NET4.0中引入的TPL类库,并引入async和await关键字轻松构建异步方法。

C#版本 .NET版本 发布日期 特性
C# 1.0 .NET Framework 1.0 2002-02-13 委托、事件
C# 1.1 .NET Framework 1.1 2003-04-24 APM(异步编程模型)
C# 2.0 .NET Framework 2.0 2005-11-07 泛型、匿名方法、迭代器、可空类型
C# 3.0 .NET Framework 3.0 2007-11-06 隐式类型
  .NET Framework 3.5 2007-11-19 对象集合初始化、自动实现属性、匿名类型、扩展方法、查询表达式、Lambda表达式、 表达式树、分部类和方法、Linq
C# 4.0 .NET Framework 4.0 2010-04-12 动态绑定、命名和可选参数、泛型的协变和逆变、互操作性
C# 5.0 .NET Framework 4.5 2012-08-15 异步和等待(async和await)、调用方信息(Caller Information)
C# 6.0 .NET Framework 4.6 2015-07-20 C# 6 中的新增功能
  .NET Core 1.0 2016-06-27  
C# 7.0 .NET Framework 4.6.2 2016-08-02 C# 7.0 中的新增功能
C# 7.1 .NET Framework 4.7 2017-04-05  
  .NET Core 2.0 2016-08-14 .NET Core 2.0 的新增功能
C# 7.2 .NET Framework 4.7.1 2017-10-17  
C# 7.3 .NET Framework 4.7.2 2018-04-30  
  .NET Core 2.1 2018-05-30 .NET Core 2.1 的新增功能
  .NET Core 2.2 2018-12-04 .NET Core 2.2 的新增功能
C# 8.0 .NET Framework 4.8 2019-04-18 C# 8.0 中的新增功能
  .NET Core 3.0 2019-09-23 .NET Core 3.0 的新增功能
  .NET Core 3.1 2019-12-03 .NET Core 3.1 的新增功能
C# 9.0 .NET 5 2020-09-04 C# 9.0 中的新增功能
  .NET 5 2020-10-13 What's new in .NET 5

1. 异步编程基础

资料整理路线:线程----线程池----线程同步----并行任务----三种异步编程模型。首先了解最基础的线程(Thread类),再进一步明白线程管理器(ThreadPool类)。因为多个工作项之间可能出现并行运行,会造成对共享资源的访问问题,所以引入线程同步基元来让共享资源得到合理使用。最后介绍.NET4.0新引入并在.NET4.5中得到优化和扩展的TPL(任务并行库),并结合C# 5.0中新引入的async和await关键字轻松构建异步方法。详细如下:

异步编程:线程概述及使用

异步编程:使用线程池管理线程

异步编程:线程同步基元对象

异步编程:轻量级线程同步基元对象

异步编程:.NET4.5 数据并行

异步编程:异步编程模型 (APM)

异步编程:基于事件的异步编程模式(EAP)

异步编程:.NET 4.5 基于任务的异步编程模型(TAP)

多线程之取消令牌(CancellationToken)

(译).NET4.X 并行任务中Task.Start()的FAQ

(译).NET4.X并行任务Task需要释放吗?

Task.CompletedTask和Task.Result小记

Thread、ThreadPool、Task、Parallel、Async和Await基本用法、区别以及弊端

C#语言规范中有说明,调用await t本质会按如下顺序执行:

1、先调用t.GetAwaiter()方法,取得等待器a;
            2、调用a.IsCompleted取得布尔类型b;
            3、如果b=true,则立即执行a.GetResult(),取得运行结果;
            4、如果b=false,则看情况:
                   4.1、如果a没实现ICriticalNotifyCompletion,则执行(a as INotifyCompletion).OnCompleted(action)
                   4.2、如果a实现了ICriticalNotifyCompletion,则执行(a as ICriticalNotifyCompletion).OnCompleted(action)
                   4.3、执行随后暂停,OnCompleted完成后重新回到状态机;

活锁与死锁

#、加锁后超时释放,且超时要有一定的随机性

#、加锁按照一定的顺序规则

2. async\await 使用注意事项

(译)关于async与await的FAQ

[译]async/await中阻塞死锁

async中必须始终返回Task(@Ron.liang)

此文因在async返回void,在基于任务的异步模式(TAP)并不知道异步任务的状态,当 this.context.Update 执行完成后,发现挂载在内存中的连接已经没有使用,就执行了回收;实际上,此时程序还没有执行完成,但是 TAP 并不知道,所以它不会去阻止这个回收的过程(使用标记),释放 DbContext 后抛出异常

Parallel.ForEach和异步的await

注意:await会导致parallel提前结束,并标示完成状态,但实际上在await后面的代码都没有执行了

3. 示例:构建Async同步基元

为TPL提供同步基元,但这只是提供TPL的应用思路,不推荐将这些同步基元应用于项目中。

(译)构建Async同步基元,Part 1 AsyncManualResetEvent

(译)构建Async同步基元,Part 2 AsyncAutoResetEvent

(译)构建Async同步基元,Part 3 AsyncCountdownEvent

(译)构建Async同步基元,Part 4 AsyncBarrier

(译)构建Async同步基元,Part 5 AsyncSemaphore

(译)构建Async同步基元,Part 6 AsyncLock

(译)构建Async同步基元,Part 7 AsyncReaderWriterLock

4. 前端中的异步

触碰jQuery:AJAX异步详解

使用jQuery.form插件,实现完美的表单异步提交

5. 持续更新……

“加关注”更快获得持续更新。

喜欢本系列博文的园友还请多多推荐(*^_^*)……感谢大家支持!

 

推荐阅读:

高性能IO模型浅析

为什么要放弃使用Thread.Sleep

【转】异步编程系列(Thread、Task、async/await、ajax等)相关推荐

  1. 异步编程系列第05章 Await究竟做了什么?

    写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提高下英文,用我拙劣的英文翻译一些重要的部分,纯属娱乐,简单分享,保持学习,谨记谦虚. 如果你觉得 ...

  2. 【JS】1015- 异步编程的终极解决方案 async/await

    早期的回调函数 回调函数我们经常有写到,比如: ajax(url, (res) => {console.log(res); }) 复制代码 但是这种回调函数有一个大缺陷,就是会写出 回调地狱(C ...

  3. .NET 并行(多核)编程系列之六 Task基础部分完结篇

    .NET 并行(多核)编程系列之六 Task基础部分完结篇 前言:之前的文章介绍了了并行编程的一些基本的,也注重的讲述了Task的一些使用方法,本篇很短,将会结束Task的基础知识的介绍. 本篇的主要 ...

  4. JavaScript 异步编程--Generator函数、async、await

    JavaScript 异步编程–Generator函数 Generator(生成器)是ES6标准引入的新的数据类型,其最大的特点就是可以交出函数的执行的控制权,即:通过yield关键字标明需要暂停的语 ...

  5. 【异步系列四】async await 原理解析之爱上 async/await

    前言 异步编程一直是 JavaScript 中比较麻烦但相当重要的一件事情,一直也有人在提出各种方案,试图解决这个问题. 从回调函数到 Promise 对象,再到 Generator 函数,每次都有所 ...

  6. JS 异步发展流程(回调函数=Async/await)

    异步编程的语法目标,就是怎样让它更像同步编程 什么是异步? 异步任务指的是,不进入主线程.而进入"任务队列"(task queue)的任务,只有"任务队列"通知 ...

  7. javascript异步编程系列【八】--Jscex版火拼俄罗斯

    一.简介 俄罗斯方块(Tetris, 俄文:Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名.俄罗斯方块的基本规则是移动.旋转和摆放游戏自动输出 ...

  8. javascript异步编程系列【一】----用Jscex画圆

    一.简介 关注老赵的jscex很久了,jscex利用eval(str)的无限可能,从"$async" 到"async",从不支持if else 等 到支持 if ...

  9. python3异步task_Python异步编程4:task对象

    Task对象是指:与任务调度,和并发有关,是指帮助在事件循环中并发的向任务列表,添加多个任务.task用于并发调度协程,通过asyncio.create_task(协程对象)的方式创建Task对象,这 ...

最新文章

  1. c语言怎么将n个数字存入到数组中_洛谷 || 拼数(C语言)
  2. python字符串的美化_python字符串格式化
  3. GPU 2014年4月 性能排名
  4. oracle 同步 部份表,Oracle 同步表数据外键处理
  5. MyBatis 批量更新,批量更新
  6. JDK与JRE及其在Eclipse中的使用
  7. [Qt教程] 第14篇 2D绘图(四)绘制路径
  8. aws高额账单_取消堆放以提高延迟并减少AWS账单
  9. Matlab代码提示“svmtrain已删除 请改用fitcsvm”,以及svmpredict没有返回结果label和精度accuracy的解决办法
  10. Linux如何搭建Java部署环境
  11. 《云云众声》第95期:业界大事接着看 HP成功收购Aruba;IBM战略变动 前景发展被看好...
  12. 苹果Mac时间追踪工具推荐:Time Sink
  13. VS用c#创建记事本
  14. SI4463软件开发记录
  15. c51单片机中断详解--适合初学者
  16. python 显著性检验_Python SciPy 统计显著性检验(Statistical Significance Tests)
  17. 前端实现base64解码编码
  18. Silvaco TCAD仿真4——设计一个元件nmos(Atlas)
  19. 5.验证面试高频问题整理(附答案)
  20. Notion 的插件介绍和使用

热门文章

  1. for in / for of 要会用
  2. 001. Ansible简介
  3. 【OpenCV函数】轮廓提取;轮廓绘制;轮廓面积;外接矩形
  4. LeetCode OJ 160. Intersection of Two Linked Lists
  5. HDU 2042:不容易系列之二
  6. codeforce 606A - Magic Spheres
  7. 坑爹的UICollectionView
  8. array专题3-一道题目不断分析就会慢慢有了思路
  9. [剑指offer]面试题第[1]题[JAVA][二维数组中的查找][数组][二分]
  10. [剑指offer]面试题第[53-1]题[JAVA][在排序数组中查找数字-1][二分法][暴力法]