小编Dev*_*awk的帖子

如何在Startup.Configure中处理异步操作?

在我的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()就足够了吗?

c# async-await asp.net-core

64
推荐指数
3
解决办法
9471
查看次数

标签 统计

asp.net-core ×1

async-await ×1

c# ×1