} // proc FinishJob public void CancelJob(ICronJobExecute job) { Task t = null; using (currentJobs.EnterReadLock()) { var cur = currentJobs.FirstOrDefault(c => c.Job == job); if (cur != null) { t = cur.Task; cur.Cancel(); } } try { t.Wait(); } catch { } } // proc CancelJob