在我的ASP.NET 5应用程序中,我想将Azure中的一些数据加载到Startup.Configure方法中的缓存中.Azure SDK专门公开异步方法.通常,调用异步方法是通过等待异步方法来完成的,如下所示:
public async Task Configure(IApplicationBuilder app, IMemoryCache cache)
{
Data dataToCache = await DataSource.LoadDataAsync();
cache.Set("somekey", dataToCache);
// remainder of Configure method omitted for clarity
}
Run Code Online (Sandbox Code Playgroud)
但是,ASP.NET 5要求Configure方法返回void.我可以使用异步void方法,但我的理解是异步void方法只应该用于事件处理程序(根据https://msdn.microsoft.com/en-us/magazine/jj991977.aspx等等) ).
我认为更好的方法是在没有等待的情况下调用异步函数,在返回的Task上调用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
}
Run Code Online (Sandbox Code Playgroud)
Stephen Walther在今年早些时候的博客文章中采用了类似的方法.但是,如果这被认为是可以接受的做法,则从该帖子中不清楚.是吗?
如果这被认为是可接受的做法,我需要什么 - 如果有的话 - 错误处理?我的理解是Task.Wait()将重新抛出异步操作引发的任何异常,并且我没有提供任何取消异步操作的机制.简单地调用Task.Wait()就足够了吗?