aspnetboilerplate - 如何取消 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;
}
解决方案
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);
}
});
}
这是工作,谢谢!
推荐阅读
- javascript - React useEffect 和 setInterval 编码挑战
- python - 在Python中获取从当前时间到当前时间的(某些)分钟之前的时间值列表
- pseudo-element - 使用伪元素后的图像重叠
- powerbi - 有没有办法使用 DirectQuery 将 UTC 转换为 PowerBI 服务器上的用户本地时间
- android - 如何在 Android ViewModel 中实现 change 方法
- ruby-on-rails - Rails - 从 Paperclip 迁移到 Active Storage
- excel - 复制和粘贴错误导致工作簿崩溃
- matlab - 如何找到数据中值第一次开始减少的数据点,因为这种减少在以下 3 个数据点继续?
- sql - 选择最后一行,但仅当列值是预期值时
- angular - 如果没有带有 nginx conf 的斜杠,Angular 应用程序将无法工作