簡體   English   中英

如何在 C# 中創建高效的后台任務?

[英]How to create an efficient background task in C#?

我對異步編程相當陌生,所以我需要幫助。

我需要做的是,創建一個 Windows 服務,不斷檢查數據庫的菜單更新(插入/更新)、表更新(插入/更新)、菜單類別更新(插入/更新)等等,如果檢測到任何更改然后,該服務將需要將這些更改一一發布到單獨的 API。 請記住,該服務將僅用於此目的,而我需要檢查更新的數據庫是 SQL Server。

那么,我該如何有效地處理這種情況呢? 我是創建新任務 (System.Threading.Tasks) 還是為每個部分創建新線程 (System.Threading.Thread),例如檢查菜單更新並上傳到 api、UpdateTable、UpdateDishes 等的 UpdateMenu,以及我該怎么做發布到 API 部分我的意思是我是否為每個 API 調用創建一個新任務? 我希望應用程序盡可能高效並選擇更改並盡快將它們發布到 API。

提前致謝。

您似乎擔心要使用的機制的開銷,以便從數據庫中獲取數據並將這些數據發布到 API。 您在想,也許Thread快而Task慢,反之亦然。 事實上,在這兩種機制之間進行選擇可能不會對您的服務對 CPU、內存或其他系統資源的需求產生可衡量的影響。

可能會產生影響的是您的服務與數據庫和 API 的通信模式。 例如,如果您的線程/任務沒有相互協調,並且同時查詢數據庫,則數據庫可能響應緩慢,並且在准備響應時可能會消耗大量內存。 那不是因為您的線程/任務很慢。 這是因為您的服務正在使用使數據庫更難響應的模式查詢數據庫。 與 API 的通信模式可能也是如此。 如果您的工作人員不協調,網絡連接可能會成為瓶頸,或者托管 API 的遠程計算機可能會受到影響。

因此,我的建議是關注機制的可用性因素,而不是它們假定的性能差異。 如果您對線程很熟悉,對任務一無所知,請使用線程。 如果您熟悉線程和任務,請使用任務,因為它們通常更易於使用。 您最好花時間優化服務及其依賴項之間的通信模式,而不是進行基准測試,試圖在所有意圖和目的都同樣有效的機制之間找到最好的。

暫無
暫無

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

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