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

标签 asynchronous concurrency async-await continuations delimited-continuations

我想知道 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/

    相关文章:

    dictionary - 我应该在范围之前锁定 map 吗?

    java - 并发网络爬虫通常将访问过的 URL 存储在并发映射中,还是使用同步来避免两次抓取相同的页面?

    javascript - 无法理解异步/等待和 promise 的工作

    c# - 使用 Async await 方法从串口异步读取

    asynchronous - 异步/等待函数中的 Expect.assertions

    c# - 如果我在未定义为任务的 IQueryable 上使用 await + ToListAsync() 是否正确

    javascript - 在执行代码之前等待 promise 解决

    javascript - 在 Mocha 中正常工作测试所需的 setTimeout 包装

    asp.net-mvc - 如何在 asp.net mvc 3 中使下载操作异步?

    android - AsyncTask 真的在概念上存在缺陷还是我只是遗漏了什么?