Здравствуйте, MTD, Вы писали:
GZ>>Остаток процедуры будет запущен после выполнения асинхронно функции
MTD>Вот это и есть синхронный код, да он притворяется асинхронным, но сущность его именно такова.
Всё наоборот. Это асинхронный код, который притворяется синхронным.
> В настоящем асинхронном коде таких явных точек синхронизации нет, после выполнения операции вызывается обработчик — это позволяет лучше нагрузить процессор не тратя время на ожидание.
Это не точка синхронизации. Это указание кода, который будет выполнен при получении результата. С нагрузкой процессора тут проблем нет, поток будет выполнять следующий обработчик.
Собственно поинт в том, что если в языке есть удобные средства для работы с асинхронным кодом (в JavaScript, Kotlin, вроде в C# тоже такое есть), то исключения прекрасно подходят для работы с ошибками. Если таких средств нет, с асинхронным кодом работать очень неудобно в любом случае.