首页 > 解决方案 > 如何取消 BackgroundJob 或让新作业不重试?

问题描述

我的情况与示例类似,用户按下“报告”按钮开始长时间运行的报告工作。您将此作业添加到队列中,并在完成后通过电子邮件将报告结果发送给您的用户。但是,当作业失败时,我不需要重试作业执行。我想要停止工作并发送通知。并且可以取消服务。

        public void CancelAllMyJob()
        {
            var jobs = backgroundJobStore.GetWaitingJobsAsync(int.MaxValue).Result.Where(o => o.JobType.Contains(nameof(MyJob))).ToList();
            if (jobs.Count > 0)
            {
                foreach (BackgroundJobInfo job in jobs)
                {
                    backgroundJobStore.DeleteAsync(job).Wait();
                }
            }
        }
        public async Task StartMyJob(MyJobInput input)
        {
            MyJobArgs args = new MyJobArgs
            {
                TenantId = AbpSession.TenantId,
                UserId = AbpSession.UserId.Value,
            };
            var id = await backgroundJobManager.EnqueueAsync<MyJob, MyJobArgs >(args);
            (await backgroundJobStore.GetAsync(Convert.ToInt64(id))).TryCount = 0;
        }

标签: aspnetboilerplate

解决方案


    public async Task StartMyJob(MyJobInput input)
            {
                MyJobArgs args = new MyJobArgs
                {
                    TenantId = AbpSession.TenantId,
                    UserId = AbpSession.UserId.Value,
                };
                await Task.Run(() =>
                {
                    using (var uow = UnitOfWorkManager.Begin(TransactionScopeOption.RequiresNew))
                    {
                        myJob.Execute(args);
                    }
                });
    }

这是工作,谢谢!


推荐阅读