![](/img/trans.png)
[英]WebApi async actions, do i have to create async methods through all call chain?
[英]Do I have to use async/await in all methods in call API chain?
我想知道如何異步實現Dapper。 我發現了這個
看起來很酷,但我注意到該調用api鏈中的所有方法都使用了async / await:
控制器:
[HttpGet]
[Route("dob/{dateOfBirth}")]
public async Task<ActionResult<List<Employee>>> GetByID(DateTime dateOfBirth)
{
return await _employeeRepo.GetByDateOfBirth(dateOfBirth);
}
倉庫:
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();
}
}
因此,如果我們之間要有更多的層,例如服務等,那么這些層也應該具有異步/等待功能? 我認為這是多余的,完全可以在需要真正返回異步結果的方法中使用異步/等待。 在其他地方,例如Controller,Services-僅Task是必需的。
可以在我們使用處理整個上下文的塊的地方放置異常。 因此,我們還必須具有異步/等待功能。
我是對的,還是我想念什么?
@編輯
因此控制器可以另存為:
[HttpGet]
[Route("dob/{dateOfBirth}")]
public Task<ActionResult<List<Employee>>> GetByID(DateTime dateOfBirth)
{
return _employeeRepo.GetByDateOfBirth(dateOfBirth);
}
如您所見,我刪除了async / await-現在只有存儲庫具有async / await,結果和性能應該相同,對嗎?
...-僅任務是必需的。
是。 但是在您只有一個異步調用且這是方法中的最后一條語句的情況下。 GetByDateOfBirth()
方法不合格,因為在await
之后出現了ToList()
。
它被稱為“消除異步和等待關鍵字” ,這是一個小的優化。
我通常不麻煩刪除它們。 具有可預測,可讀和修改安全的代碼更為重要。 此外, await
有助於轉換有害的協變量和反變量返回類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.