我想知道 async
之间的关系是什么?/await
模式(从 Scala、F#、C# 等已知)和延续:
async
/await
模式一个完整的延续的有限子集? (如果为真,延续如何更具表现力?)async
的一种可能的实现技术吗?/await
? (如果属实,还有哪些其他实现方法?)async
/await
和延续只是正交概念,唯一的共同点是它们都支持控制流/数据流的一些抽象? 最佳答案
我想说两者之间的关系是这样的:async
- await
是一种编程语言使用的技术,因此您可以编写看起来同步的代码(例如,没有显式的延续委托(delegate)),但实际上是异步执行的。这是通过创建一个表示函数当前执行状态的对象并将其注册为等待操作的继续来实现的。
简而言之,async
- await
使用延续。
Is the
async
/await
pattern a limited subset of full-blown continuations? (If true, how are continuations more expressive?)
你可以那样说。延续是一个更一般的概念,
async
- await
只是使用它们来实现异步。例如,在 continuation-passing style编程,您可以通过为每个操作设置两个延续来实现异常处理:一个用于成功案例,一个用于失败案例。这种延续的使用与
async
无关。 - await
(你必须明确地写出每个延续,可能是一个 lambda)。Are continuations just one possible implementation technique for
async
/await
? (If true, what other implementation approaches exist?)
我想说延续的概念对于
async
来说非常重要。 - await
.核心思想是
async
- await
是暂时停止执行该功能并在以后恢复它。为此,您需要某种可用于恢复的对象。这正是延续。
关于asynchronous - 异步/等待模式和延续之间的关系是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22817660/