在我的 ASP.NET 5应用程序中,我想从 Azure 加载一些数据到启动程序的缓存中。配置方法。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
}
但是,ASP.NET 5要求 Configure 方法返回 void。我可以使用一个异步 void 方法,但是我的理解是,异步 void 方法只应该用于事件处理程序(根据 https://msdn.microsoft.com/en-us/magazine/jj991977.aspx和其他许多方法)。
我认为更好的方法是不等待地调用异步函数,调用等待返回的 Task,然后通过 Task 缓存结果。结果属性,如下所示:
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 在今年早些时候的 博客文章中使用了类似的方法。然而,从那篇文章来看,这是否被认为是一种可以接受的做法还不清楚。是吗?
如果这被认为是一种可接受的实践,那么我需要什么样的错误处理(如果有的话)呢?我的理解是,任务。Wait ()将重新抛出由异步操作引发的任何异常,我还没有提供任何取消异步操作的机制。只是调用 Task。等够了吗?