在我的ASP.NET 5应用程序中,我想将Azure中的某些数据加载到Startup.Configure方法中的缓存中。Azure SDK仅公开异步方法。通常,调用异步方法是通过异步方法内部的await完成的,如下所示:
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。我可以使用异步无效方法,但是我的理解是异步无效方法仅应用于事件处理程序(如https://msdn.microsoft.com/zh-cn/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
}
Stephen Walther在今年早些时候的博客中使用了类似的方法。但是,从该职位尚不清楚这是否可以接受。是吗?
如果这被认为是可以接受的做法,那么我需要什么(如果有)错误处理?我的理解是Task.Wait()将重新引发异步操作引发的所有异常,而我没有提供任何取消异步操作的机制。仅仅调用Task.Wait()就足够了吗?