我想知道async
/ await
模式(从Scala,F#,C#等已知)与延续之间的关系是什么:
async
/ await
模式是完整延续的有限子集吗? (如果是真的,那么延续更具表现力?)async
/ await
的一种可能的实施方法吗? (如果是,那么还有其他实施方法吗?)async
/ await
和延续只是正交概念,唯一的共同点是它们都能实现控制流/数据流的抽象?答案 0 :(得分:4)
我想说两者之间的关系是这样的:async
- await
是一种编程语言使用的技术,这样你就可以编写看起来同步的代码(例如没有明确的连续代理),但是这实际上是异步执行的。这是通过创建一个对象来实现的,该对象表示函数的当前执行状态,并将其注册为等待操作的 continuation 。
简而言之,async
- await
使用延续。
async
/await
模式是完整延续的有限子集吗? (如果是真的,那么延续更具表现力?)
你可以这么说。 Continuations是一个更通用的概念,async
- await
只是使用它们来实现异步。
例如,在continuation-passing style编程中,您可以通过为每个操作设置两个延续来实现异常处理:一个用于成功案例,一个用于失败案例。对continuation的使用与async
- await
无关(你必须明确地编写每个continuation,可能作为lambda)。
延续只是
async
/await
的一种可能的实施技巧吗? (如果是,那么还有其他实施方法吗?)
我说延续的概念对async
- await
非常重要。
async
- await
的核心思想是暂时停止执行该功能,并在以后恢复它。为此,您需要某种可用于恢复的对象。这正是延续的原因。