Quartz.net 实现单线程执行Job

使用Quartz.net的时候经常会遇到一种情况,就是job执行速度过慢,而Quartz.net默认也是并发执行的,这就导致一种情况,之前的job还没做完,第二个就开始了,在某些业务场景下这种情况容易造成数据错乱,那么这个时候就需要把执行改成单线程执行,解决起来很简单,就是在job类加注解[
DisallowConcurrentExecutionAttribute]

具体实现方式如下,以abp vnext 实现的quartz.net为例子:

   [DisallowConcurrentExecutionAttribute]    public class QueryWork : QuartzBackgroundWorkerBase    {        private IAppService _appService;        public QueryWork(IAppService appService)        {            _appService = appService;            JobDetail = JobBuilder.Create<QueryWork>().WithIdentity(nameof(QueryWork)).Build();            Trigger = TriggerBuilder.Create().WithIdentity(nameof(QueryWork))                .WithDailyTimeIntervalSchedule(s => s.WithIntervalInSeconds(5)).Build();        }        public async override Task Execute(IJobExecutionContext context)        {            await _appService.QueryAsync();        }    }

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月1日
下一篇 2021年4月1日

相关推荐