Quartz.Net—IJob特性


IJob默认情况下是无状态的,和其他系统没有关系  特别是job里面的jobdata每次都是新的。可以无限扩展。

PersistJobDataAfterExecution JobData持久化

Job在执行的后会生成一个新的Job为下一次执行,并且返回这个老的Job。  这样就保持了Job的无状态。但是有时候需要让他有状态,就要加上特性PersistJobDataAfterExecutionAttribute,使JobDataMap一直保持。

[PersistJobDataAfterExecution]
public class MyJob7 : IJob
{

    public Task Execute(IJobExecutionContext context)
    {
        Console.WriteLine(context.JobDetail.JobDataMap["zangfeng"]);
        context.JobDetail.JobDataMap["zangfeng"] = context.JobDetail.JobDataMap["zangfeng"] + "1";
        return Task.Factory.StartNew(() => Console.WriteLine($"工作任务测试7:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"));  
    }
}
View Code

 

DisallowConcurrentExecution 禁用同步执行

一个Job可能会有多个Trigger。导致一个Job,同时执行。

//[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public class MyJob7 : IJob
{

    public Task Execute(IJobExecutionContext context)
    {
        Console.WriteLine(context.JobDetail.JobDataMap["zangfeng"]);
        context.JobDetail.JobDataMap["zangfeng"] = context.JobDetail.JobDataMap["zangfeng"] + "1";
        return Task.Factory.StartNew(() => Console.WriteLine($"工作任务测试7:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}"));  
    }
}
View Code

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM