异步/等待模式和延续之间的关系是什么?

soc*_*soc 8 concurrency continuations asynchronous async-await delimited-continuations

我想知道async/ awaitpattern(从Scala,F#,C#等已知)和continuation 之间的关系是什么:

  • async/ await模式全面爆发延续的一个有限的子集?(如果是真的,那么延续更具表现力?)
  • 是延续的只是一种可能的实现技术async/ await?(如果是,那么还有其他实现方法吗?)
  • 或者async/ await和/ 和延续只是正交概念,其中唯一的共同点是它们都能实现控制流/数据流的一些抽象?

svi*_*ick 5

我会说两者之间的关系是:async- await是一种编程语言使用的技术,您可以编写看起来是同步的代码(例如,没有显式的连续委托),但实际上是异步执行的。这是通过创建一个代表该函数当前执行状态的对象并将其注册为等待操作的继续来实现的。

简而言之,async- await 使用延续。

async/ await模式全面爆发延续的一个有限的子集?(如果为true,那么延续如何更具表现力?)

你可以那样说。延续是一个比较笼统的概念,async- await只是用它们来实现异步。

例如,在连续传递样式编程中,您可以通过为每个操作具有两个连续来实现异常处理:一个用于成功案例,一个用于失败案例。延续的这种使用与async- await(您必须显式地编写每个延续,可能是lambda)无关。

延续仅仅是async/的一种可能的实现技术await吗?(如果为true,还存在哪些其他实现方法?)

我想说,延续的概念是async-的核心await

核心思想是async- 暂时await停止执行该功能,并在以后恢复它。为此,您需要某种可以用于执行恢复操作的对象。这正是延续。