gpt4 book ai didi

java - 为什么 Java 没有异步/等待?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:03 27 4
gpt4 key购买 nike

使用 async/await 可以以命令式风格编写异步函数。这可以极大地方便异步编程。在 C# 中首次引入后,它被许多语言采用,例如 JavaScript、Python 和 Kotlin。

EA Async是一个向 Java 添加类似异步/等待功能的库。该库抽象出使用 CompletableFutures 的复杂性。

但为什么 async/await 既没有被添加到 Java SE 中,也没有计划在未来添加它?

最佳答案

简短的回答是,Java 的设计者试图消除对异步方法的需求,而不是促进它们的使用。

根据 Ron Pressler 的 talk使用 CompletableFuture 进行异步编程会导致三个主要问题。

  1. 不可能对异步方法调用的结果进行分支或循环
  2. stacktraces 不能用于识别错误源,分析变得不可能
  3. 它是病毒式的:所有进行异步调用的方法也必须是异步的,即同步和异步世界不会混合

虽然 async/await 解决了第一个问题,但它只能部分解决第二个问题,根本没有解决第三个问题(例如,C# 中执行 await 的所有方法都必须标记为 < em>异步)。

但是为什么需要异步编程呢?只是为了防止线程的阻塞,因为线程是昂贵的。因此,在 Loom 项目中,Java 设计人员没有在 Java 中引入异步/等待,而是致力于虚拟线程(也称为纤程/轻量级线程),旨在显着降低线程成本,从而消除异步编程的需要。这将使上述所有三个问题也都过时。

关于java - 为什么 Java 没有异步/等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58075295/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com