В моем приложении ASP.NET 5 я хочу загрузить некоторые данные из Azure в кеш внутри моего метода Startup.Configure. Azure SDK предоставляет только асинхронные методы. Как правило, вызов метода async выполняется через ожидание внутри асинхронного метода, например:
public async Task Configure(IApplicationBuilder app, IMemoryCache cache)
{
Data dataToCache = await DataSource.LoadDataAsync();
cache.Set("somekey", dataToCache);
// remainder of Configure method omitted for clarity
}
Однако ASP.NET 5 требует, чтобы метод Configure возвращал void. Я мог бы использовать метод async void, но я понимаю, что методы async void должны использоваться только для обработчиков событий (согласно https://msdn.microsoft.com/en-us/magazine/jj991977.aspx среди многих других).
Я думал, что лучший способ сделать это - это вызвать функцию async без ожидания, вызвать Wait из возвращенной задачи, а затем кешировать результаты с помощью свойства Task.Results, например:
public void Configure(IApplicationBuilder app, IMemoryCache cache)
{
Task<Data> loadDataTask = DataSource.LoadDataAsync();
loadDataTask.Wait();
cache.Set("somekey", loadDataTask.Result);
// remainder of Configure method omitted for clarity
}
Стивен Вальтер использовал аналогичный подход в сообщении в начале этого года. Однако это неясно из этой должности, если это считается приемлемой практикой. Это?
Если это считается приемлемой практикой, что - если есть - обработка ошибок мне нужна? Мое понимание заключается в том, что Task.Wait() будет перебрасывать любые исключения, вызванные операцией async, и я не предоставил никакого механизма для отмены операции async. Просто вызывается Task.Wait() достаточно?