600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【转】异步编程系列(Thread Task async/await ajax等)

【转】异步编程系列(Thread Task async/await ajax等)

时间:2023-11-13 04:39:52

相关推荐

【转】异步编程系列(Thread Task async/await ajax等)

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

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需要释放吗?

pletedTask和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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。