public int UpdateCompletedStateByChannels(string eventID) { eventID.CheckStringIsNullOrEmpty("eventID"); bool allCompleted = true; AMSEventChannelCollection ecs = this.LoadEventAndChannel(eventID); foreach (AMSEventChannel ec in ecs) { if (ec.State != AMSEventState.Completed) { allCompleted = false; break; } } int result = 0; if (allCompleted) { result = this.UpdateState(eventID, AMSEventState.Completed); } return(result); }
public static void StopEvent(AMSQueueItem message, CancellationToken cancellationToken) { AMSEvent eventData = null; try { eventData = AMSEventSqlAdapter.Instance.LoadByID(message.ResourceID); if (eventData != null) { if (eventData.State == AMSEventState.Running) { AMSEventSqlAdapter.Instance.UpdateState(eventData.ID, AMSEventState.Stopping); } AMSEventChannelCollection ecs = AMSEventSqlAdapter.Instance.LoadEventAndChannel(eventData.ID); Task[] stopProgramTasks = new Task[ecs.Count]; for (int i = 0; i < stopProgramTasks.Length; i++) { AMSEventChannel ec = ecs[i]; stopProgramTasks[i] = Task.Factory.StartNew(() => StopOneProgram(eventData, ec, cancellationToken)); } Task.WaitAll(stopProgramTasks.ToArray()); AMSEventSqlAdapter.Instance.UpdateCompletedStateByChannels(eventData.ID); } } finally { if (eventData != null) { LockHelper.Unlock(eventData); } } }