public void Execute(IJobExecutionContext context) { foreach (var qh in _queueHandlers) { var blockedJobs = qh.GetBlockedJobs(); Logger.DebugFormat("Queue {0} has {1} blocked jobs!", qh.Name, blockedJobs.Count); //if we have blocked jobs, probably the worker is blocked. var allBlockedHandles = blockedJobs .Select(j => j.ExecutingHandle) .Distinct(); foreach (var blockedHandle in allBlockedHandles) { Logger.WarnFormat("Unblock jobs for queue {0} and handle {1}", qh.Name, blockedHandle); _pollerJobManager.RestartWorker(blockedHandle, true); } foreach (var job in blockedJobs) { Logger.WarnFormat("Unblock job {0}", job.Id); qh.SetJobExecuted(job.Id, "Timeout, unblocked by QueuedJobQuartzMonitor", null); } } }