Asp-Net-Core开发笔记:集成Hangfire实现异步任务队列和定时任务( 三 )


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,可以看到任务噌的一下就上到几千,速度极快~

需要注意的就是 CrawlProcList 方法的第二个参数 pageSize 我们给了默认值100,在正常使用是没问题的,可以不传入这个参数,默认就是100 。
BackgroundJob.Enqueue 方法里不能省略这个参数,不然会报错说编译器无法解析啥的,这个应该是C#的语言限制,具体我暂时还没去深入研究 。
小结OK,这样就初步搞定了数据采集 & 定时采集的功能,这部分刚好是我国庆第一天加班完成的,后续的就交给时间吧~ 国庆剩下几天的假期让它跑个够,等假期结束再回去看看效果如何,到时有新的进展我也会及时更新博客 。
对了,我还打算封装个异步任务和定时任务的接口(似乎 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
【Asp-Net-Core开发笔记:集成Hangfire实现异步任务队列和定时任务】

经验总结扩展阅读