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