Skip to main content
 首页 » 编程设计

c#之Quartz.Net之死锁

2024年01月11日32mengfanrong

我正在开发一个调度程序,它每 30 秒检查一次数据库中调查表中的任何更改。调查表包含名称、到期时间(为简单起见)等字段。

这是我一步一步做的——我实际上使用 Quartz Job,它设置为每 30 秒触发一次以添加更多作业。

  • 加载在上次提取日期/时间后修改过的所有调查
  • 通过它们进行 Foreach 并添加新的或更新现有的作业/触发器

程序在我第一次启动时运行良好,它得到所有调查等。

但是,如果我进入调查并更改某些内容,我的程序会获取更改,但它会抛出异常

Quartz.JobPersistenceException:无法获取下一个触发器:无法检索触发器:事务(进程 ID 59)在锁定资源上与另一个进程发生死锁,并已被选为死锁牺牲品。

这不确定为什么会发生这种情况。欢迎提出任何建议,我现在花了几个小时试图找到它。

请您参考如下方法:

我相信当您使用 ADO Job Store 时,这是 Quartz.Net 的一个已知问题。有一些建议似乎可以缓解该问题,例如将 UpdateLockRowSemaphore 与 SQLServer 一起使用或将您的 adojobstore 移动到单独的数据库。

这是 threads来自讨论该问题的 Google 网上论坛邮件列表。