随笔分类 -  其它 / ASP.NET / 异步和并行

.net里的异步和并行,可等待与不等待...
摘要:返回目录 应该这样理解它 异步,早期开发人员对它有很多误解,认为不阻塞主线程就是异步,更有认为不阻塞UI就是异步,但异步归根结底和这两个东西关系并不大,异步的出现主要是为了提高线程的利用率,让可用线程更高,而不是一个线程只做一件事,这件事没有完成就不去做下面的事情,这是不正确的,线程应该被解放出来! 阅读全文
posted @ 2017-11-08 11:18 张占岭 阅读(4450) 评论(0) 推荐(5) 编辑
摘要:返回目录 说起CancellationTokenSource我们应该不会陌生,对于Thread,Task来说,我们启动一个线程去做一些事,如果希望它在某个阶段去被动的停止,可以使用这个CancellationTokenSource对象,把它注入到Task里,使用当外界触发Cancel()方法时,你的 阅读全文
posted @ 2017-09-06 11:47 张占岭 阅读(1628) 评论(1) 推荐(0) 编辑
摘要:返回目录 题目有点意思,大家都知道Dictionary<K,V>不是线程安全的类型,而List<T>是线程安全的吗?在今天之前大叔没有去测试过,而就在今天也是一个VIP问我,说在我的代码中使用了并行,然后为一个List赋值,说的直接一点就是:List元素是全局的,在各个线程里分别去操作它,测试数据是 阅读全文
posted @ 2016-12-08 22:36 张占岭 阅读(4882) 评论(12) 推荐(11) 编辑
摘要:返回目录 并行是.net4.5主打的技术,同时被封装到了System.Threading.Tasks命名空间下,对外提供了静态类Parallel,我们可以直接使用它的静态方法,它可以并行一个委托数组,或者一个IEnumerable的迭代,而今天主要通过一个访问数据库的代码,来说说并发Parallel 阅读全文
posted @ 2016-10-28 09:57 张占岭 阅读(2936) 评论(9) 推荐(9) 编辑
摘要:返回目录 在System.Threading.Tasks命名空间下,使用ReaderWriterLockSlim对象来实现多线程并发时的锁管理,它比lock来说,性能更好,也并合理,我们都知道lock可以对代码块进行锁定,当多线程共同访问代码时,只能有一个线程去访问它,其它线程被阻塞,这对于写操作是 阅读全文
posted @ 2016-10-08 13:31 张占岭 阅读(1663) 评论(1) 推荐(0) 编辑
摘要:写过很多篇异步,线程,并行的文章了,我觉得有必要总结一下了,然后把目录整理一下,分享给大家,这么大家看的时候方便些! 非阻塞 异步操作无须额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下,处理函数可以不必使用共享变量(即使无法完全不用,最起码可以减少 共享变量的数量),减少了死锁的可能 阅读全文
posted @ 2016-05-26 11:05 张占岭 阅读(4759) 评论(0) 推荐(12) 编辑
摘要:返回目录 并行这个概念出自.net4.5,它被封装在System.Threading.Tasks命名空间里,主要提供一些线程,异步的方法,或者说它是对之前Thread进行的二次封装,为的是让开发人员更方便的调用它,对于异步与多线程我们在之前的几讲里已经介绍过了,今天主要说说并行,并行也可以叫并行计算 阅读全文
posted @ 2016-05-26 10:52 张占岭 阅读(5971) 评论(6) 推荐(0) 编辑
摘要:返回目录 关于死锁的原因 理解该死锁的原因在于理解await 处理contexts的方式,默认的,当一个未完成的Task 被await的时候,当前的上下文将在该Task完成的时候重新获得并继续执行剩余的代码。这个context就是当前的SynchronizationContext ,除非它是空的。W 阅读全文
posted @ 2016-05-11 14:39 张占岭 阅读(3096) 评论(3) 推荐(7) 编辑
摘要:返回目录 最近怪事又开始发生了,IIS的应用程序池无做挂掉,都指向同一个矛头,async,threadPool,Task,还有一个System.NullReferenceException,所以这些都让我们感觉,我们的异步程序出现了问题,事实也是如此,我们的异步调用引用了对“上下文”的非空引用,最后 阅读全文
posted @ 2016-05-10 11:27 张占岭 阅读(2291) 评论(4) 推荐(1) 编辑
摘要:返回目录 今天晚上没事写了个测试的代码,又看了看.net的并行编程,两个方法,一个是异步async修饰的,另一个是普通的方法,在控制台程序的Main方法里去调用这两个方法,会有什么结果呢? 首先我们看一下方法的组成,step1如下 step2如下 我们可以看到step2很简单,不会有什么延时,就是在 阅读全文
posted @ 2015-09-16 22:58 张占岭 阅读(6080) 评论(3) 推荐(3) 编辑
摘要:回到目录 返回异步与并行目录 异步操作是.net4.5推出的新名词,事实上,这东西早就有了,它归根结底是通过线程池来实现的,即将一个大任务分成多个小任何块,每个线程并行处理其中的一个,完成后再把结果告诉主线程,在.net4.5推出后,这种技术得到了封装,让开发人员实现起来更加方便了,但是,并发(导步 阅读全文
posted @ 2015-03-11 15:32 张占岭 阅读(4958) 评论(7) 推荐(4) 编辑
摘要:回到目录 返回异步与并行目录 在写完仓储接口的改造改造后,总觉得有个代码的坏味道,这种味道源于它的DRP,即重复的代码太多了,即异步操作和同步操作其实只是在insert,update和delete上有所不同,获取数据的方法都是一样的,所以,我最后决定,将异步的接口进行改造,让它更加合理,方法后都加上 阅读全文
posted @ 2014-12-04 21:46 张占岭 阅读(3164) 评论(8) 推荐(0) 编辑
摘要:回到目录 返回异步与并行目录 上一讲中,我们定义了三个异步操作接口,这回我们将对它进行实现,而有一个基础知识需要大家清楚,那就是实现接口的方式,一般我们使用默认的方式(隐式实现),这种方法实现的接口方式均为public,即它可以脱离接口,而直接通过类对象去访问,而当一个类继承多个接口,而这些接口中都 阅读全文
posted @ 2014-12-04 11:19 张占岭 阅读(7959) 评论(2) 推荐(2) 编辑
摘要:回到目录 返回异步与并行目录 C#5.0带来了并行编程 {C#1.0托管代码→C#2.0泛型→C#3.0LINQ→C#4.0动态语言→C#5.0异步编程} 随着C#5.0在.net4.5出来之后,它们主推的并行技术也逐渐变得越来越热,这种热量已经传到了我这里,身为仓储大叔的我,一定也对自己的仓储进行 阅读全文
posted @ 2014-12-04 10:28 张占岭 阅读(8257) 评论(1) 推荐(5) 编辑
摘要:回到目录上一讲中介绍了使用HttpClient如何去调用一个标准的Web Api接口,并且我们知道了Post,Put方法只能有一个FromBody参数,再有多个参数时,上讲提到,需要将它封装成一个对象进行传递,而这讲主要围绕这个话题来说,接口层添加一个新类User_Info,用来进行数据传递,而客户... 阅读全文
posted @ 2014-10-23 13:51 张占岭 阅读(51329) 评论(15) 推荐(13) 编辑
摘要:回到目录HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api的方法,基于api项目的特殊性,它需要有一个完全安全的环境,所以,你的api控制器看起来有点特别,只有... 阅读全文
posted @ 2014-10-23 11:55 张占岭 阅读(76715) 评论(21) 推荐(18) 编辑
摘要:返回目录 之前写过两篇关于异步编程的文章,详细可以进入C#~异步编程和C#~异步编程在项目中的使用 .net的各个版本都有自己主推的技术,像.NET1.1中的委托,.NET2.0中的泛型,.NET3.0中的Linq,.NET4.0中的Dynimac,而在.NET4.5中主要推出的是异步编程,而实现异 阅读全文
posted @ 2014-09-04 13:21 张占岭 阅读(18253) 评论(1) 推荐(11) 编辑
摘要:返回目录 .net frameworks5.0主推的就是异步编程APM,它事实上不是新的东西,而是微软将之前的线程等概念的进行的一次封装,提出了await,async等关键字,引用了Task类,也大大简化了APM的开发,下面我们将通过一个具体的例子来介绍一下APM的使用场合。 实例说明 有一个面向W 阅读全文
posted @ 2014-06-16 13:29 张占岭 阅读(13815) 评论(2) 推荐(0) 编辑