【发布时间】:2021-08-29 14:35:39
【问题描述】:
这与 Why use Async/await all the way down 有点相关。我有一些需要维护的旧版 EF Core,其中包含许多非异步的嵌套调用。我想知道是否可以使顶级控制器仅异步并使用 Task.Run() 包装服务调用。
这两个控制器动作有什么区别。 在第一个中,EF 核心被同步调用。但是电话 包装在 Task.Run 中,所以我假设它将异步执行
第二个,EF核心调用是异步的 但是,由于控制器操作是异步的,这甚至是必要的吗? async inside async inside async... 是否会比顶部的一个异步调用提供任何性能提升?
案例一
//controller, async call
public async Task<ActionList<string>> GetNames()
{
var names = await Task.Run(() => peopleService.GetNames());
return Ok(names);
}
//people service layer, no async
public List<string> GetNames()
{
return _context.People.Where(...).Select(x => x.Name).ToList();
}
案例2
//controller, async
public async Task<ActionList<string>> GetNames()
{
var names = await peopleService.GetNames();
return Ok(names);
}
//people service layer, async
public async Task<List<string>> GetNamesAsync()
{
return await _context.People.Where(...).Select(x => x.Name).ToListAsync();
}
【问题讨论】:
标签: entity-framework asp.net-core async-await