每个人都在谈论PersistJobDataAfterExecution,但除非你再次执行这个工作,否则这似乎不起作用,我没兴趣。为什么我第一次工作正常时会执行两次作业。此外,如果它持续存在,那么在哪里?执行后JobDetail不存在。
我将数据存储在JobDataMap中,并使用它来获取作业在运行时的进度(通过ajax Web调用)。当作业完成执行时,它删除它自己的触发器,因此调度程序不再有JobDetail,因此没有JobDataMap。
通常我会将数据存储在应用程序缓存中,但我不能,因为这些数据特定于用户会话。 ASP.net HttpContext在Quartz线程中不可用。
当线程完全独立,暂停作业和中断作业时,如何从已执行(过去时)Quartz作业中获取数据,两者都会产生与完成执行相同的结果(IContext)它会摧毁自己吗?
我是否真的必须运行一个无限的睡眠循环,以便从外部获取数据,然后硬杀它?
答案 0 :(得分:0)
我最终使用了HttpRuntime.Cache,因为它是线程安全的。 这是最简单的解决方案,而不是令人印象深刻的替代方案: 调用作业两次(PersistJobDataAfterExecution),使用睡眠循环(hackish),更改石英以使用ADO(bleh),发布到SynchronizationContext(不稳定)或写入磁盘(超级)。