/// <summary> /// Adds a new worker. /// </summary> private void AddWorker() { var worker = _workerFactory.Create(); _workers.Add(worker); worker.SystemException += RaiseSystemException; worker.UserException += RaiseUserException; }
public WorkingLine(EventLoop eventLoop, string queueTag, IWorkerFactory factory, int worker = 1, ThreadPriority threadPriority = ThreadPriority.Normal) { QueueTag = queueTag ?? throw new ArgumentNullException(nameof(queueTag)); WorkerFactory = factory ?? throw new ArgumentNullException(nameof(factory)); Worker = Math.Max(1, Math.Min(MAX_WORKER, worker)); ThreadPriority = threadPriority; _eventLoop = eventLoop; for (int i = 0; i < worker; i++) { var thread = new WorkerThread(_queue, factory.Create(), $"{queueTag}_{i:0000}"); _threadBusy[thread] = false; _threads.Add(thread); thread.BusyChanged += WorkerThreadBusyChangedHandler; thread.TaskRejected += WorkerThreadTaskRejectedHandler; thread.WorkerError += WorkerThreadErrorHandler; thread.TaskBegin += WorkerThreadTaskBeginHandler; thread.TaskEnd += WorkerThreadTaskEndHandler; } }