在我的 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
}
但是,ASP.NET 5 要求Configure 方法返回void。我可以使用 async void 方法,但我的理解是 async void 方法只应该用于事件处理程序(根据https://msdn.microsoft.com/en-us/magazine/jj991977.aspx https://msdn.microsoft.com/en-us/magazine/jj991977.aspx等等)。
我认为更好的方法是调用异步函数而不等待,对返回的任务调用 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) 在博客文章 http://stephenwalther.com/archive/2015/01/29/asp-net-5-and-angularjs-part-6-security今年早些时候。然而,从该帖子中尚不清楚这是否被认为是可接受的做法。是吗?
如果这被认为是可接受的做法,那么我需要什么(如果有的话)错误处理?我的理解是 Task.Wait() 将重新抛出异步操作引发的任何异常,并且我没有提供任何机制来取消异步操作。简单地调用 Task.Wait() 就足够了吗?