Пример #1
0
        private IEnumerable <CommandExecutionStatus> ExecuteMassCommand(IMassCommand arg)
        {
            var states = new MultiThreadedPersistance <CommandExecutionStatus>();

            var handles = new List <WaitHandle>();

            foreach (var instanceId in arg.InstanceIds)
            {
                var handle = new AutoResetEvent(false);

                handles.Add(handle);

                var state = new MultipleExportState
                {
                    InstanceId           = instanceId,
                    States               = states,
                    WaitHandle           = handle,
                    AuthorizationService = AuthorizationService,
                    Identity             = AuthenticationService.GetCurrentIdentity(),
                    Comment              = arg.Comment,
                    CommandToExecute     = arg.Command,
                    StateToSet           =
                        (arg is IContainsStateName) ? (arg as IContainsStateName).StateNameToSet : null
                };

                ThreadPool.QueueUserWorkItem(RaiseCommandTask, state);
            }

            WaitHandle.WaitAll(handles.ToArray(), new TimeSpan(0, 0, 10, 0));

            return(states.Items);
        }
Пример #2
0
        public IEnumerable <CommandExecutionStatus> MassExportBillDemands(ApiMassCommandEventArg arg)
        {
            AuthenticationService.Authenticate(arg.SecurityToken);

            if (!AuthenticationService.IsAuthenticated())
            {
                return(GetErrorExecutionStatuses(arg));
            }

            if (!AuthorizationService.IsAllowedToExecuteCommand(arg.InstanceIds, WorkflowCommandType.Export))
            {
                GetErrorExecutionStatuses(arg);
            }

            var states = new MultiThreadedPersistance <CommandExecutionStatus>();

            var handles = new List <WaitHandle>();

            foreach (var instanceId in arg.InstanceIds)
            {
                var handle = new AutoResetEvent(false);

                handles.Add(handle);

                var state = new MultipleExportBillDemandState {
                    InstanceId = instanceId, States = states, WaitHandle = handle, BillDemandBusinessService = BillDemandBuinessService, Identity = AuthenticationService.GetCurrentIdentity(), Comment = arg.Comment
                };

                ThreadPool.QueueUserWorkItem(RaiseBillDemandExportTask, state);
            }

            WaitHandle.WaitAll(handles.ToArray(), new TimeSpan(0, 0, 10, 0));

            return(states.Items);
        }