【问题标题】:Quartz.NET and DeadlocksQuartz.NET 和死锁
【发布时间】:2011-09-27 18:39:19
【问题描述】:

我正在使用最新版本的 Quartz.NET。我正在使用 AdoJobStore(带有 SqlServer-20 委托)来存储我的作业。我以这种方式创造新工作:

        JobDetail jobDetail = new JobDetail("myJob", null, typeof(HelloJob));
        jobDetail.JobDataMap["dsa"] = "hello";
        CronTrigger trigger = new CronTrigger("MyTrigger", null, "0/1 * * * * ?");
        trigger.StartTimeUtc = TriggerUtils.GetEvenHourDate(DateTime.UtcNow.AddMonths(-3));
        trigger.Name = "MyTrigger";
        sched.ScheduleJob(jobDetail, trigger);

// 另一个工作

JobDetail jobDetail = new JobDetail("myJob_Bye", null, typeof(HelloJob));
jobDetail.JobDataMap["dsa"] = "Good Bye";
CronTrigger trigger = new CronTrigger("MyTrigger", null, "0/2 * * * * ?");
trigger.StartTimeUtc = TriggerUtils.GetEvenHourDate(DateTime.UtcNow.AddMonths(-3));
trigger.Name = "MyTrigger2";
sched.ScheduleJob(jobDetail, trigger);

问题是,当我启动调度程序时,它在某些(触发上面配置的作业)时间内工作,然后抛出 SqlException 并显示消息“事务(进程 ID 53)在锁定资源上与另一个进程死锁,并已被选为死锁受害者。重新运行事务。”。 错误发生在 JobStoreSupport.cs 的第 4217 行。看起来锁处理存在问题。任何人都知道我该如何解决这个问题。

附:这个石英组件是我正在玩的自定义构建。我只是在 AdoConstants.cs 和相应的 .sql 文件中更改了表名和列名。

感谢您的支持

【问题讨论】:

    标签: .net scheduled-tasks scheduling quartz.net


    【解决方案1】:

    我发现出了什么问题。看起来在使用 SQL Server 时,您不应该使用 varchar 数据类型。 Quartz.NET 有一些问题。相反,切换到 nvarchar,问题将得到解决。

    【讨论】:

    • 您是否将 QRTZ_ 表列从 varchar 切换到 nvarchar 以解决此问题?另外,当您说最新版本时,您想到的究竟是什么版本?
    猜你喜欢
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 2015-12-26
    • 2015-04-03
    • 1970-01-01
    • 2011-08-24
    • 2017-11-19
    • 1970-01-01
    相关资源
    最近更新 更多