Asynchronous 什么';async/await模式和continuations之间的关系是什么?

Asynchronous 什么';async/await模式和continuations之间的关系是什么?,asynchronous,concurrency,async-await,continuations,delimited-continuations,Asynchronous,Concurrency,Async Await,Continuations,Delimited Continuations,我想知道async/await模式(如Scala、F#、C#等所知)和continuations之间的关系是什么: async/await模式是完整延续的有限子集吗?(如果为真,连续体如何更具表现力?) 延续只是async/wait的一种可能实现技术吗?(如果为真,还有哪些其他实现方法?) 或者async/await和continuations只是正交的概念,它们的唯一共同点是它们都支持对控制流/数据流进行某种抽象 我想说这两者之间的关系是:async-await是编程语言使用的一种技术,您可

我想知道
async
/
await
模式(如Scala、F#、C#等所知)和continuations之间的关系是什么:

  • async
    /
    await
    模式是完整延续的有限子集吗?(如果为真,连续体如何更具表现力?)
  • 延续只是
    async
    /
    wait
    的一种可能实现技术吗?(如果为真,还有哪些其他实现方法?)
  • 或者
    async
    /
    await
    和continuations只是正交的概念,它们的唯一共同点是它们都支持对控制流/数据流进行某种抽象

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

简而言之,
async
-
await
使用continuations

async
/
await
模式是完整延续的有限子集吗?(如果为真,连续体如何更具表现力?)

你可以这么说。延续是一个更一般的概念,
async
-
wait
只是使用它们来实现异步

例如,在编程中,您可以通过为每个操作提供两个连续性来实现异常处理:一个用于成功案例,另一个用于失败案例。continuations的使用与
async
-
await
无关(您必须显式地编写每个continuations,可能作为lambda)

延续只是
async
/
wait
的一种可能实现技术吗?(如果为真,还有哪些其他实现方法?)

我想说,延续的概念对于
async
-
await
非常重要


async
-
await
的核心思想是现在停止执行函数,稍后再继续执行。为此,您需要某种类型的对象,可以用于恢复。这正是continuation的含义。

此外,continuateWith支持恢复异步方法。例如,对于原始线程,这是不可能的,因为当它退出时,您无法被回调。您只能等待。不过,继续并不一定是异步执行。另一个例子是
yield
,它的最初目的与异步无关。@是的,这是我一直想说的一部分。@svick。谢谢你的回答!您能谈谈async/await如何使用continuations吗?(例如,它只是挂在下面的shift/reset上,还是有更神奇的事情发生?@soc我认为
async
-
wait
与分隔的连续性无关,它只是使用正常的连续性。相关: