异步/等待模式和延续之间有什么关系?
我想知道async
/ await
模式(从Scala,F#,C#等已知)和延续之间有什么关系:
async
/ await
模式是全面延续的有限子集吗? (如果属实,延续性如何更具表现力?) async
/ await
一种可能的实现技术? (如果属实,还有哪些其他实施方法?) async
/ await
和延续只是正交概念,其中唯一的共同点是它们都能够控制流/数据流的抽象? 我会说这两者之间的关系是这样的: async
- await
是编程语言使用的一种技术,以便您可以编写看起来同步的代码(例如,没有显式的继续委托),但实际上它是异步执行的。 这是通过创建一个对象来实现的,该对象表示该函数的当前执行状态并将其注册为等待操作的继续。
简而言之, async
- await
使用延续。
async
/ await
模式是全面延续的有限子集吗? (如果属实,延续性如何更具表现力?)
你可以那样说。 继续是一个更普遍的概念, async
- await
只是用它们来实现异步。
例如,在继续传递样式编程中,可以通过对每个操作进行两次延续来实现异常处理:一个用于成功案例,另一个用于失败案例。 这种延续的使用与async
- await
无关(你必须明确地写出每个延续,可能是lambda)。
延续只是async
/ await
一种可能的实现技术? (如果属实,还有哪些其他实施方法?)
我会说延续的概念对于async
await
来说非常重要。
async
await
的核心思想是立即停止执行该功能,并在稍后恢复。 为此,你需要一些可以用来恢复的对象。 这是一个延续。
上一篇: What's the relationship between the async/await pattern and continuations?