Тема: Async - await
Поясніть, будь ласка, мастодонту, доки він на бронтозавра не перетворився: а в чому сенс цього синтаксичного цукру?
Просто в Rust оце додали, то я вже прочитав... а тепер не можу зрозуміти: нащо?
Якщо у нас є функція, і ми хочемо контролювати, коли її викликати, то її слід викликати саме в тому місці, де слід. Псевдокодом:
future = async f();
...
value = future.await();
Що заважає викликати f() в останньому рядку? Нащо там змінна future, яка не містить значення, але може бути перетворена на таке значення викликом wait?
Припустимо, ми маємо кілька можливих викликів, а хочемо скористатися лише одним:
if(...)future = async f():
else future = async g();
...
value = future.await();
Це - звичайний поліморфізм. Так, заради одного виклику кілька класів писати не дуже зручно. Але ж функції вже давно стали "громадянами першого класу", а посилання на них - і поготів:
if(...)f_to_call = f;
else f_to_call = g;
...
value = f_to_call();
Це, як на мене, значно зрозуміліше за всі ці future. Параметри? Загортаємо в лямбду:
if(...)f_to_call = lambda: f(x,y);
else f_to_call = lambda g(z);
...
value = f_to_call();
Чого саме я не розумію, чи розумію неправильно?