コード例 #1
0
        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();
                }
            }
        }
コード例 #2
0
 /// <summary>
 /// Initializes all implementation-specific fields.
 /// </summary>
 private void Init()
 {
     ScheduledTasks = new BlockingConcurrentDictionary <ScheduledTask <T>, IAsyncAction>();
 }
コード例 #3
0
 /// <summary>
 /// Initializes all implementation-specific fields.
 /// </summary>
 private void Init()
 {
     ScheduledTasks = new BlockingConcurrentDictionary <ScheduledTask <T>, CancellationTokenSchedulerAction>();
 }