Создание абстрактный базовый класс просто предложение, сделанное в документации Quartz.NET, и не является обязательным требованием для выполнения задания цепочки. В основном они предполагают, что если вы хотите работу цепи: «AJob» -> «BJob» -> «CJob», вы могли бы сделать что-то вдоль линий этого:
Создать абстрактный класс «ChainBaseJob».
Сделайте свой класс работы (который AJob и BJob являются типами) наследуются от ChainBaseJob.
ChainBaseJob будет содержать какой-то метод, как:
string GetNextJobInChain()
... которая возвращает имя задания (что означает имя задания Quartz). Существует множество способов использовать это, но я полагаю, что документация предполагает, что ваш TriggerListener проверяет, будет ли (в течение заданного метода работы), если заполненное задание (скажем, «AJob») наследуется от ChainBaseJob. Если это произойдет, он будет использовать его и вызвать GetNextJobInChain и использовать имя, возвращаемое этим методом, чтобы вызвать планировщик для его выполнения после завершения AJob. Если все будет выполнено правильно, TriggerListener будет знать, как выполнить BJob после завершения AJob.
Удачи.
Большое спасибо за объяснение. Если я сделаю этот базовый класс абстрактным, как я могу прочитать карту данных задания для задания в базовом классе. Дело в том, что каждая моя работа в значительной степени имеет те же детали работы, что и адрес электронной почты, идентификатор пользователя, поэтому я хотел бы прочитать эти значения в свойствах базового класса, поэтому мне не нужно повторять этот код в каждом производном классе. Если бы я сделал базовый класс не абстрактным, тогда я могу вызвать конструктор базового класса из конструктора производного класса и прочитать свойства. Я хотел бы узнать, что если базовый класс является абстрактным, то как я могу это достичь. –
Вот как я это сделал. общественный абстрактный класс QuartzJobBase: IJob { public int A {get; задавать; } public void Execute (JobExecutionContext context) { JobDataMap dataMap = context.JobDetail.JobDataMap; A = dataMap.GetInt ("a"); ExecuteInternal (контекст); } общественной абстрактные недействительный ExecuteInternal (JobExecutionContext контекст);}} В производном классе для каждого задания, переопределить метод ExecuteInternal. –