Как да проверя дали всички задачи са приключили преди изключване? - Quartz.net

Чудя се да кажем, че имам задача, която се изпълнява и на услугата Windows, в която работи, е казано да спре. Как мога да забавя това и да изчакам, докато всички задачи приключат и quartz.net се изключи.

Виждам само като

 scheduler.Shutdown();

и

scheduler.IsStarted

person chobo2    schedule 18.08.2011    source източник


Отговори (3)


Можете да използвате API-Doc

public virtual void Shutdown( 
  bool waitForJobsToComplete
)

това казва на Quartz.Net да изчака, докато всички задачи бъдат завършени, или API-Doc

virtual IList GetCurrentlyExecutingJobs()

Освен това трябва да помолите ОС да изчака вашата услуга MSDN:

[ComVisibleAttribute(false)]
public void RequestAdditionalTime(
int milliseconds
)

в противен случай Windows ще убие вашата услуга след 20 секунди (в зависимост от системните ви настройки) Източник.

За да попречи на услугата да спре спирането, SCM ще изчака само до определен лимит, докато услугата ви се спре сама. По подразбиране за това ограничение е 20 секунди (тази стойност е в ключа на системния регистър WaitToKillServiceTimeout() в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control)

Ааа, и не забравяйте за изключване на системата, Windows не обича да чака...

person Andreas    schedule 18.08.2011

Ако използвате/инсталирате услугата, която идва с дистрибуцията, по подразбиране планировчикът ще изчака, докато всички задания приключат с изпълнението. Не е нужно да правите нищо. Ако сте написали своя собствена обвивка на услугата, използвайте метода за изключване, който е споменат в отговора на @Andreas.

person jvilalta    schedule 29.08.2011

Тъй като Shutdown() е Task, трябва да изчакате, докато бъде завършено (вижте кода по-долу), в противен случай основната нишка на WindowsService няма да изчака Quartz да завърши всичките си неща, включително незавършени задачи.

Използвайте претоварването за Shutdown(waitForJobsToComplete = true), за да изчакате задачите да приключат:

scheduler.Shutdown(waitForJobsToComplete = true);

while (!scheduler.IsShutdown)
{
    //waiting for shutdown to be completed
    Thread.Sleep(1000);
}
person Logar314159    schedule 18.09.2020