Wait это старое. async\await это лишь синтаксический сахар. При использовании async\await все исключения пробрасываются в вызывающий поток, и вы можете все обернуть в try/catch, естественно читаемость кода и тд. Вот хорошая статья
https://habrahabr.ru/post/260217/ и как вариант есть книга Асинхронное программирование в C# 5.0 Алекса Дэвиса.