Почему у Java нет async / await? - PullRequest
3 голосов
/ 24 сентября 2019

Используя async / await, можно кодировать асинхронные функции в императивном стиле.Это может значительно облегчить асинхронное программирование.Так как он был впервые представлен в C #, он был принят многими языками, такими как JavaScript, Pythons и Kotlin.

EA Async - это библиотека, которая добавляет асинхронную / ожидающую функциональность в Java.Библиотека абстрагируется от сложности работы с CompletableFutures.

Но почему async / await не был добавлен в Java SE, и нет никаких планов добавить его в будущем?

1 Ответ

10 голосов
/ 24 сентября 2019

Короткий ответ заключается в том, что разработчики Java стараются устранить необходимость в асинхронных методах вместо облегчения их использования.

Согласно разговору асинхронного программирования Рона Пресслера с использованием CompletableFuture, возникает три основных причины:проблемы.

  1. ветвление или зацикливание результатов асинхронных вызовов методов невозможно
  2. невозможно использовать стековые трассировки для определения источника ошибок, профилирование становится невозможным
  3. это вирусный: все методы, которые делают асинхронные вызовы, должны быть также асинхронными, то есть синхронные и асинхронные миры не смешиваются

Хотя асинхронное / ожидание решает первую проблему, оно может только частично решить вторуюпроблема и не решает третью проблему вообще (например, все методы в C #, выполняющие await должны быть помечены как async ).

Но почему асинхронное программированиенужен вообще?Только для предотвращения блокировки потоков, потому что потоки являются дорогостоящими.Таким образом, вместо внедрения async / await в Java, в проекте Loom Java-дизайнеры работают над волокнами (иначе говоря, легкими потоками), которые будут стремиться значительно снизить стоимость потоков и, таким образом, устранить необходимость асинхронного программирования.Это сделало бы все вышеперечисленные проблемы также устаревшими.

...