Здравствуйте, Shmj, Вы писали:
S>Вся суть async/await — в том что можно получить Task/Promise/Future и манипулировать ими. Т.е. можете дождаться результата — а можете не дожидаться — но не просто не дожидаться — а заиметь промис, в котором будет результат.
S>Без возможности получить промис — все теряет смысл.
Все это есть в go:
// Вот моя асинхронная функция
func sum(a, b int) int {
return a + b
}
// Я могу вызвать ее и дождаться результата (поток ОС при этом не блокируется)
x := sum(1, 2)
// Я могу вызвать и не дожидаться результата (при этом несмотря на создание новой горутины, это может все работать на одном единственном потоке ОС)
go sum(1, 2)
// В крайне редких кейзах, когда мне не нужен результат прям сейчас, а нужен когда-то потом, то я могу написать
result := make(chan int)
go func(){result <- sum(1,2)}()
... куча кода
println(<-result)
Во всех вариантах это асинхронный код, который не блокирует потоки ОС и конкурентно таких функций может быть запущено сотни тысяч