имхо, async..await создает ровно ту же ситуацию, что и возврат ошибок - каждый вызов может быть с сюрпризом и нужно тщательно изучать подсказки IDE и без которой тут особо не покодишь, и таки все равно await пропускается по невнимательности и выполнение весело и задорно идет дальше. checked исключения позволяют еще больше закрутить гайки, но они разве что в джаве активно используются, но если запрет игнорирования результата функции появится, то это уже ближе к ним, хотя опять-таки никто не запрещает мутить переменную с ошибкой в го или же не пробросить через return, как и пробросить не то и не так. Хотя в ди в либах исключения скорее редкий гость, чаще там ассерты все же.