protected virtual void InternalStart(IList <T> jobsTodo) { while (Working) { eventLock.WaitOne(); while (CurrentConcurrentWorkers < MaxConcurrentWorkers && CurrentWork < jobsTodo.Count && Working) { var work = workerFactory.CreateWorker(jobsTodo[CurrentWork]); lock (objectLock) currentWorkers.Add(work); work.WorkCompleted += WorkCompleted; work.StartWork(); Interlocked.Increment(ref CurrentConcurrentWorkers); Interlocked.Increment(ref CurrentWork); } eventLock.Reset(); lock (objectLock) { if (CompletedWorks != jobsTodo.Count) { continue; } OnWorksCompleted(CompletedWorks); Working = false; break; } } }
private IEnumerable <IWorker> MakeWorkers() { for (int i = 0; i < _config.quantity; i++) { yield return(_factory.CreateWorker(i)); } }
void AddWorker() { lock (_workers) { var workerName = string.Format("Rebus {0} worker {1}", _busId, _workers.Count + 1); _log.Debug("Adding worker {0}", workerName); try { var worker = _workerFactory.CreateWorker(workerName); _workers.Add(worker); } catch (Exception exception) { throw new RebusApplicationException(string.Format("Could not create {0}", workerName), exception); } } }
void AddWorker() { lock (_workers) { var workerName = $"Rebus {_busId} worker {_workers.Count + 1}"; _log.Debug("Adding worker {0}", workerName); try { var worker = _workerFactory.CreateWorker(workerName); _workers.Add(worker); } catch (Exception exception) { throw new RebusApplicationException(exception, $"Could not create {workerName}"); } } }
public Task <ThreadLog <TOut> >[] BuildTasksTab <TOut>(int nbTasks, IWorkerFactory <TOut> factory) { var tasks = new Task <ThreadLog <TOut> > [nbTasks]; ThreadLog <TOut> DoWork(int TaskId) { var log = new ThreadLog <TOut>(); log.SetThreadId(); log.TaskId = TaskId; // double parenthesis due to that the factory ouput a functor that can be called. log.Result = factory.CreateWorker()(); return(log); } for (int taskId = 0; taskId < nbTasks; taskId++) { // you realy should pay attention here ;) tasks[taskId] = Task <ThreadLog <TOut> > .Factory.StartNew(() => DoWork(taskId)); } return(tasks); }
public IWorker CreateWorker(string workerName) { NumberOfWorkersCreated++; return(_workerFactory.CreateWorker(workerName)); }