簡體   English   中英

我必須在調用API鏈中的所有方法中使用async / await嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM