private void ThreadPoolCallback(object state) { Tuple <ScheduledTask <T>, CancellationTokenSchedulerAction> Parameters = state as Tuple <ScheduledTask <T>, CancellationTokenSchedulerAction>; try { if (Parameters.Item2.IsCancellationRequested || OnTaskStarting(Parameters.Item1)) { Parameters.Item2.IsCanceled = true; } else { Parameters.Item1.Run(Parameters.Item2); } } catch (Exception ex) { Parameters.Item2.IsSuccess = false; Parameters.Item2.IsCanceled = false; Parameters.Item2.Exception = ex; } finally { if (!IsDisposed) { OnTaskCompleted(Parameters.Item1, Parameters.Item2); BlockingConcurrentDictionary <ScheduledTask <T>, CancellationTokenSchedulerAction> tasks = ScheduledTasks; if (tasks != null) { tasks.Remove(Parameters.Item1); } Parameters.Item1.UpdateSchedule(DateTimeOffset.Now); Parameters.Item1.IsScheduled = false; Parameters.Item2.Source.Dispose(); } } }
/// <summary> /// Initializes all implementation-specific fields. /// </summary> private void Init() { ScheduledTasks = new BlockingConcurrentDictionary <ScheduledTask <T>, IAsyncAction>(); }
/// <summary> /// Initializes all implementation-specific fields. /// </summary> private void Init() { ScheduledTasks = new BlockingConcurrentDictionary <ScheduledTask <T>, CancellationTokenSchedulerAction>(); }