//private object _timerSaveLock = new object(); //void _runtimeTimer_NeedSave(object sender, EventArgs e) //{ // lock (_timerSaveLock) // { // _runtimePersistence.SaveTimer(Id, _runtimeTimer); // } //} private void TimerComplete(object sender, RuntimeTimerEventArgs e) { TransitionDefinition currentTimerTransition; ProcessInstance processInstance; try { processInstance = Builder.GetProcessInstance(e.ProcessId); PersistenceProvider.FillProcessParameters(processInstance); currentTimerTransition = processInstance.ProcessScheme.GetTimerTransitionForActivity(processInstance.CurrentActivity). FirstOrDefault(p => p.Trigger.Timer.Name == e.TimerName); } catch (Exception ex) { Logger.Log.Error("Error Timer Complete Workflow UNKNOWN", ex); throw; } if (currentTimerTransition != null) { try { SetProcessNewStatus(processInstance, ProcessStatus.Running); var parametersLocal = new List <ParameterDefinitionWithValue>(); parametersLocal.Add(ParameterDefinition.Create(DefaultDefinitions.ParameterIdentityId, Guid.Empty)); parametersLocal.Add(ParameterDefinition.Create(DefaultDefinitions.ParameterImpersonatedIdentityId, Guid.Empty)); parametersLocal.Add(ParameterDefinition.Create(DefaultDefinitions.ParameterSchemeId, processInstance.SchemeId)); var newExecutionParameters = new List <ExecutionRequestParameters>(); newExecutionParameters.Add(ExecutionRequestParameters.Create(processInstance.ProcessId, processInstance.ProcessParameters, currentTimerTransition)); Bus.QueueExecution(newExecutionParameters); } catch (Exception ex) { Logger.Log.Error(string.Format("Error Timer Complete Workflow Id={0}", processInstance.ProcessId), ex); SetProcessNewStatus(processInstance, ProcessStatus.Idled); } } }