Короткий ответ заключается в том, что разработчики Java стараются устранить необходимость в асинхронных методах вместо облегчения их использования.
Согласно разговору асинхронного программирования Рона Пресслера с использованием CompletableFuture, возникает три основных причины:проблемы.
- ветвление или зацикливание результатов асинхронных вызовов методов невозможно
- невозможно использовать стековые трассировки для определения источника ошибок, профилирование становится невозможным
- это вирусный: все методы, которые делают асинхронные вызовы, должны быть также асинхронными, то есть синхронные и асинхронные миры не смешиваются
Хотя асинхронное / ожидание решает первую проблему, оно может только частично решить вторуюпроблема и не решает третью проблему вообще (например, все методы в C #, выполняющие await должны быть помечены как async ).
Но почему асинхронное программированиенужен вообще?Только для предотвращения блокировки потоков, потому что потоки являются дорогостоящими.Таким образом, вместо внедрения async / await в Java, в проекте Loom Java-дизайнеры работают над волокнами (иначе говоря, легкими потоками), которые будут стремиться значительно снизить стоимость потоков и, таким образом, устранить необходимость асинхронного программирования.Это сделало бы все вышеперечисленные проблемы также устаревшими.