DiP*_*Pix 0 c# asp.net asynchronous async-await asp.net-web-api
我想知道如何异步实现Dapper。我发现了这个
看起来很酷,但我注意到该调用api链中的所有方法都使用了async / await:
控制器:
[HttpGet]
[Route("dob/{dateOfBirth}")]
public async Task<ActionResult<List<Employee>>> GetByID(DateTime dateOfBirth)
{
return await _employeeRepo.GetByDateOfBirth(dateOfBirth);
}
Run Code Online (Sandbox Code Playgroud)
仓库:
public async Task<List<Employee>> GetByDateOfBirth(DateTime dateOfBirth)
{
using (IDbConnection conn = Connection)
{
string sQuery = "SELECT ID, FirstName, LastName, DateOfBirth FROM Employee WHERE DateOfBirth = @DateOfBirth";
conn.Open();
var result = await conn.QueryAsync<Employee>(sQuery, new { DateOfBirth = dateOfBirth });
return result.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我们之间要有更多的层,例如服务等,那么这些层也应该具有异步/等待功能?我认为这是多余的,完全可以在需要真正返回异步结果的方法中使用异步/等待。在其他地方,例如Controller,Services-仅Task是必需的。
可以在我们使用处理整个上下文的块的地方放置异常。因此,我们还必须具有异步/等待功能。
我是对的,还是我想念什么?
@编辑
因此控制器可以另存为:
[HttpGet]
[Route("dob/{dateOfBirth}")]
public Task<ActionResult<List<Employee>>> GetByID(DateTime dateOfBirth)
{
return _employeeRepo.GetByDateOfBirth(dateOfBirth);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我删除了async / await-现在只有存储库具有async / await,结果和性能应该相同,对吗?
...-仅任务是必需的。
是。但是在您只有一个异步调用且这是方法中的最后一条语句的情况下。该GetByDateOfBirth()方法不会因为出线的ToList()到来后的await。
它被称为“消除异步和等待关键字”,这是一个小的优化。
我通常不麻烦删除它们。具有可预测,可读和修改安全的代码更为重要。同样,await有助于转换有害的协变量和反变量返回类型。
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |