Я знаю, что это старый вопрос, но он первый, который появляется в Google, и, откровенно говоря, принятый ответ - плохой ответ. Вы никогда не должны затягивать задержку, чтобы вы могли использовать оператор ожидания.
Лучший подход к методу инициализации:
private async Task<bool> InitializeAsync()
{
try{
// Initialize this instance.
}
catch{
// Handle issues
return await Task.FromResult(false);
}
return await Task.FromResult(true);
}
Это будет использовать инфраструктуру async для инициализации вашего объекта , но затем он вернет логическое значение.
Почему это лучший подход? Во-первых, вы не заставляете задерживать свой код, который ИМХО полностью поражает целью использования инфраструктуры async. Во-вторых, это хорошее правило, чтобы вернуть что-то из метода асинхронности. Таким образом, вы знаете, действительно ли ваш асинхронный метод работал / делал то, что предполагалось. Возвращение только задачи - это эквивалент возвращаемого значения void по неасинхронному методу.