我正在开发一个调度程序,它每 30 秒检查一次数据库中调查表中的任何更改。调查表包含名称、到期时间(为简单起见)等字段。
这是我一步一步做的——我实际上使用 Quartz Job,它设置为每 30 秒触发一次以添加更多作业。
- 加载在上次提取日期/时间后修改过的所有调查
- 通过它们进行 Foreach 并添加新的或更新现有的作业/触发器
程序在我第一次启动时运行良好,它得到所有调查等。
但是,如果我进入调查并更改某些内容,我的程序会获取更改,但它会抛出异常
Quartz.JobPersistenceException:无法获取下一个触发器:无法检索触发器:事务(进程 ID 59)在锁定资源上与另一个进程发生死锁,并已被选为死锁牺牲品。
这不确定为什么会发生这种情况。欢迎提出任何建议,我现在花了几个小时试图找到它。
请您参考如下方法:
我相信当您使用 ADO Job Store 时,这是 Quartz.Net 的一个已知问题。有一些建议似乎可以缓解该问题,例如将 UpdateLockRowSemaphore 与 SQLServer 一起使用或将您的 adojobstore 移动到单独的数据库。
这是 threads来自讨论该问题的 Google 网上论坛邮件列表。
