从Java技术栈迁移到C#,一个最直观的不同是C#对异步编程的语法层面的支持:async/await。在此之前,我也在Javascript以及Dart等语言中使用过类似的功能,以至于我一度想当然地认为async/await是Javascript最先发明的;但当我去追根溯源的时候才发现这其实C#几乎是最早开始引入的(2012年的时候C# 5.0中正式引入),比Javascript(ECMAScript 2017)整整领先了5年。不得不佩服,虽然没有很火,但是微软的技术前瞻性的确是做的很好的。
那异步编程到底是什么呢?我没有找到一个完全准确的释义,但是要解释清楚还是比较容易的:
- 程序执行无序等待一个任务的完成(比如I/O操作)
- 可以并发地执行多个任务
实际上,并发也即意味着任务之间不需要串行等待。我的理解是,异步编程的核心就是优雅的实现“并发”。
[阅读更多...]