此文记载一些.NET异步编程相关的总结性观点。

  • async/await 在ASP.NET做的最大贡献(早期ASP.NET的异步开发模式同样也有这样的贡献),是在访问数据库的时候、访问远程IO的时候及时释放了当前的处理性程,可以让这些线程回到线程池中,从而实现可以去处理其它请求的功能。
  • 异步的ASP.NET开发能够在处理能力上带来多大的提高,取决于我们的程序有多少时间是被阻塞的,也就是那些访问数据库和远程Service的时间。
  • 除了将代码改成异步,我们还需要在IIS上做一些相对的配置来实现最优化。
  • 不管是ASP.NET、WinForm还是Mobile、还是平板,在大型系统中都只是一个与用户交互的端而已,所以不管你现在是做所谓的前端(JavaScript + CSS等),还是所谓的后端(ASP.NET MVC、WCF、Web API 等 ),又或者是比较时髦的移动端(IOS也好,Andrioid也罢,哪怕是不争气的WP),都只是整个大型系统中的零星一角而已。当然我并不是贬低这些端的价值,正是因为我们专注于不同,努力提高每一个端的用户体验,才能让这些大型系统有露脸的机会。我想说的是,在你对现在技术取得一定的成就之后,不要停止学习,因为整个软件架构体系中还有很多很多美妙的东西值得我们去发现。
  • APM和EAP是在async/await之前的两种不同的异步编程模式。
  • APM如果不阻塞主线程,那么完成通知(回调)就会执行在另外一个线程中,从而给我们更新UI带来一定的问题。
  • EAP的通知事件是在主线程中执行的,不会存在UI交互的问题。
  • 最后,我们还学习了在Winform下不同线程之间交互的问题,以及SynchronizationContext。
  • APM是.NET下最早的异步编程方法,从.NET1.0以来就有了。在.NET2.0的时候,微软意识到了APM的回调函数中与UI交互的问题,于是带来了新的EAP。APM与EAP一直共存到.NET3.5,在.NET4.0的时候微软带来了TPL,也就是我们所熟知的Task编程,而.NET4.5就是我们大家知道的async/await了,可以看到.NET一直在不停的进步,加上最近不断的和开源社区的合作,跨平台等特性的引入,我们有理由相信.NET会越走越好。