public WorkerCompletedData RunSync()
        {
            IActionInvoker[] arr = ExtractArrray();

            var progressDatas = new WorkerProgressData[arr.Length];

            var result = default(WorkerCompletedData);

            using (var sync = new ManualResetEventSlim(false))
            {
                var progress = new WorkerProgressReportCallback(progressDatas, data =>
                {
                    result = data;
                    sync.Set();
                });

                var actionInvokers = arr.Select((p, i) => new InternalWorkerProgress(p, progress, i)).ToArray();

                _queueWorker.PostBulk(actionInvokers);

                sync.Wait();
            }

            return(result);
        }
        public void Run(Action <WorkerCompletedData> fn)
        {
            IActionInvoker[] arr = ExtractArrray();

            var progressDatas = new WorkerProgressData[arr.Length];

            var progress = new WorkerProgressReportCallback(progressDatas, fn);

            var actionInvokers = arr.Select((p, i) => new InternalWorkerProgress(p, progress, i)).ToArray();

            _queueWorker.PostBulk(actionInvokers);
        }
        public void Run(IActionInvoker <WorkerCompletedData> compeltedInvoker)
        {
            IActionInvoker[] arr = ExtractArrray();

            var progressDatas = new WorkerProgressData[arr.Length];

            var invokerSync = new InternalWorkerDataSync <WorkerCompletedData>(compeltedInvoker, _counterBlocked);

            var progress = new WorkerProgressReportCompleted(_queueWorker, progressDatas, invokerSync);

            var actionInvokers = arr.Select((p, i) => new InternalWorkerProgress(p, progress, i)).ToArray();

            _queueWorker.PostBulk(actionInvokers);
        }