异步/等待在编程中的优势

2020-11-04 22:06:44

在编程中,异步/等待模式可以是许多编程语言的句法特征,其允许以几乎类似于标准同步函数的方式构造异步、非阻塞函数。它在语义上与协程的概念相关联,通常使用类似的技术实现,主要目的是为程序提供执行其他代码的机会,同时期望完成一个长期运行的异步任务,通常由承诺或类似的数据结构表示。该特性在C#5.0、Python3.5、Hack、Dart、Kotlin 1.1、Rust 1.39、[1]NIM 0.9.4[2]和JavaScript ES2017中都有,还有一些实验性的Add扩展、测试版,以及Scala[3]和C++的特定实现。

异步编程可以是一种并行编程,其允许劳动单元与第一应用线程分开运行。当工作完成时,它会通知MOST线程(以及工作是完成还是失败)。使用它有很多好处,比如提高应用程序性能和增强响应能力。

提高应用程序的性能和响应能力,特别是在您有不需要阻塞执行的长期运行操作的情况下。在这种情况下,您将执行其他工作,同时期待长期运行任务的结果。

以一种整洁和可读的方式组织代码,这比传统线程创建和处理的样板代码要好得多。与使用之前的异步编程方法(如使用纯任务)相比,使用Aync/AWait编写的代码更少,代码的可维护性更强。

Aync/Await是Backround Worker的新替代品,它已经在Windows Forms桌面应用程序上使用。

您利用了语言特性的最新升级,因为异步/等待是在C#5中引入的,并且对该特性添加了一些改进,如针对每种异步和通用异步类型(如ValueTask)的改进。

当您有不需要阻塞执行的长时间运行的操作时,非阻塞编程。在这种情况下,您将执行其他工作,同时期待长期运行任务的结果。

想象一下,我们有两个程序流,它们可以在不阻塞彼此情况下并行添加。

例如,我们希望记录出现的每一个错误,但在相同的时间,这不会阻塞流程,所以万一我们在相同的时间记录并返回一条消息。

异步/等待编程中线程管理的优势我们知道,在正常编程(阻塞)中,尽管我们有不同的流(两个不依赖的流),但每一行代码都会阻塞它之后的所有内容,直到它完成方法。但在异步/等待编程中,设备不会阻止该线程,换句话说,它们将释放该线程以尝试另一项工作,当该函数完成该工作时,任何空闲线程都将处理响应。

“基本上,除非下一个条件为真…,否则您将使用异步编程。”

您的目标是简单而不是高效。您希望运行简单或短时间运行的操作。异步编程不会带来好处,最终会增加主要是CPU操作的操作开销,而不是涉及网络或开销的人员。

总之,Async/AWait是过去几年添加到JavaScript中的最重要的革命性特性之一。它会让你意识到承诺在句法上是多么的混乱,并提供了一个直观的替代方案。

注意对于使用这个功能,你可能会有一些合理的怀疑,那就是它让异步代码变得不那么明显:每当我们看到回调或a时,我们的眼睛就学会了识别异步代码。然后,你的眼睛需要几周的时间才能适应新的标志,但是C#已经使用这个功能很多年了,其他熟悉它的人知道这是值得的,这种小的、暂时的不便是值得的。