簡體   English   中英

卡在異步編程中

[英]Stuck with asynchronous programming

我試圖了解 C# 中的async/await 假設我有一個簡單的 API 端點,它將使用 EfCore FirstOrDefault擴展方法通過其 id 從數據庫中獲取數據,如下所示:

        [HttpGet]
        [Route("{id:int}")]
        public IActionResult Get(int id)
        {
            var user= userService.GetById(id);
     
            return Ok(user);
        }

我是否需要使此方法異步以使用 EfCore FirstOrDefaultAsync並像這樣在UserService接口中聲明異步方法來獲得更好的性能?

        [HttpGet]
        [Route("{id:int}")]
        public async Task<IActionResult> Get(int id)
        {
            var user= await userService.GetByIdAsync(id);
     
            return Ok(user);
        }

這種改變有意義嗎? 如果是或否,我該如何檢查?

這種改變有意義嗎?

是的,在一般意義上。 web 服務器上的異步是關於可擴展性的; 通過釋放原本只是在等待 I/O 的線程,您的服務器可以用更少的線程處理更多的請求。

然而,這並不是一個籠統的“讓一切都異步並且你的服務器將是黃金”的聲明。 例如,如果您有一個數據庫作為后端(即 MSSQL 服務器而不是 Azure SQL),並且如果您的大多數/所有請求以某種方式訪問數據庫,那么數據庫服務器可能會成為您的可伸縮性瓶頸而不是您的 web 服務器。 在這種情況下,您可以投入大量工作將async添加到您的整個項目中,只是為了發現您縮放了不需要縮放的東西。

一般來說,我建議新代碼使用async (因為現在它幾乎和同步代碼一樣簡單); 但是是否值得對舊代碼進行現代化改造是一個只有你才能回答的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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