Вы когда-нибудь забывали про await?
А я однажды забыл написать await перед вызовом асинхронного метода в рабочем проекте.
Самое интересное, что локально, особенно в дебаге, всё работало как нужно и без ошибок.
Мы выложились на тестовую среду, и тестировщик завёл ошибку, которая меня удивила: ведь описанный им сценарий прекрасно отрабатывал локально. Но на тестовой среде что-то было не так.
Знаете, ошибки по невнимательности обнаружить сложнее всего. Вот вроде смотришь на неё, но не замечаешь в упор. Да-да, мозг коварен в такие моменты 🤯
Так вот, продебажив добрых полдня и обложив всё, что можно, логами, я всё-таки нашёл место «неисправности».
Оказалось, что вызванный асинхронный метод запускался, но код шёл дальше, не дожидаясь его завершения. Локально это не проявлялось из-за таймингов, а на тестовом контуре порядок выполнения оказался другим.
После того как добавил недостающий await, необходимый сценарий, конечно же, успешно отработал.
Этот пост не о том, почему и когда нужен await перед вызовом асинхронного метода. Он о том, как банальная невнимательность помогла закрепить знания.