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开发系统软件的一些细节