private void OnFirstElementChanged(object source, KeyedPriorityQueueHeadChangedEventArgs <TimerEventSubscription> e) { lock (this.locker) { ITimerService service = this.executor.GetService(typeof(ITimerService)) as ITimerService; if ((e.NewFirstElement != null) && (this.executor != null)) { WorkflowTrace.Host.TraceEvent(TraceEventType.Information, 0, "TimerEventSubscriptionQueue: {0} Schedule Timer {1} for {2} ", new object[] { this.instanceId, e.NewFirstElement.SubscriptionId, e.NewFirstElement.ExpiresAt }); service.ScheduleTimer(this.executor.ProcessTimersCallback, e.NewFirstElement.WorkflowInstanceId, e.NewFirstElement.ExpiresAt, e.NewFirstElement.SubscriptionId); } if (e.OldFirstElement != null) { WorkflowTrace.Host.TraceEvent(TraceEventType.Information, 0, "TimerEventSubscriptionQueue: {0} Unschedule Timer {1} for {2} ", new object[] { this.instanceId, e.OldFirstElement.SubscriptionId, e.OldFirstElement.ExpiresAt }); service.CancelTimer(e.OldFirstElement.SubscriptionId); } } }