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);
        }
Beispiel #2
0
        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);
                }
            }
        }