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); }
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); }