public class CrawlService {// 依賴注入一些服務private readonly IBaseRepository<Proc> _repo;public async Task CrawlAllProc() {for(var i=1; i<2000; i++) {// await CrawlProcList(i);BackgroundJob.Enqueue(() => CrawlProcList(i, 100));}}public async Task CrawlProcList(int page, int pageSize = 100) {// 具體代碼省略了var procList = ; //...foreach (var proc in procList) {// await CrawlProc(proc);BackgroundJob.Enqueue(() => CrawlProc(proc));}}public async Task CrawlProc(Proc proc) { }}把原來 await 的地方注釋掉,換成用 Hangfire 創建異步任務,運行起來,打開dashboard,可以看到任務噌的一下就上到幾千,速度極快~
需要注意的就是小結OK,這樣就初步搞定了數據采集 & 定時采集的功能,這部分剛好是我國慶第一天加班完成的,后續的就交給時間吧~ 國慶剩下幾天的假期讓它跑個夠,等假期結束再回去看看效果如何,到時有新的進展我也會及時更新博客 。CrawlProcList方法的第二個參數pageSize我們給了默認值100,在正常使用是沒問題的,可以不傳入這個參數,默認就是100 。
但BackgroundJob.Enqueue方法里不能省略這個參數,不然會報錯說編譯器無法解析啥的,這個應該是C#的語言限制,具體我暫時還沒去深入研究 。
對了,我還打算封裝個異步任務和定時任務的接口(似乎 AspNetCore 沒有這部分功能?),因為我不想代碼和 Hangfire 有太高的耦合,封裝成抽象的接口,以后如果換別的組件也沒有壓力 。參考資料
就把這件事先加入 todo list 吧~
- https://docs.hangfire.io/en/latest/index.html
- https://codewithmukesh.com/blog/hangfire-in-aspnet-core-3-1/
- https://github.com/gonzigonz/HangfireCore-Example
經驗總結擴展閱讀
- 剛買蘋果筆記本的注意事項
- 初等數論學習筆記 III:數論函數與篩法
- 開發商為何會熱衷于豪宅項目
- 前端程序員學習 Golang gin 框架實戰筆記之一開始玩 gin
- 驅動開發:通過Async反向與內核通信
- gRPC+Protocol Buffer Go微服務實戰 - 用戶服務開發
- WPF開發經驗-實現自帶觸控鍵盤的TextBox
- 前端三件套 HTML+CSS+JS基礎知識內容筆記
- 驅動開發:通過ReadFile與內核層通信
- 用golang開發系統軟件的一些細節
