public TaskWatcher(ITask task, EventLoop eventLoop) { Task = task; _eventLoop = eventLoop; _incompleteDependencies.AddRange(task.Dependencies); foreach (var dep in _incompleteDependencies) { dep.StateChanged += DependencyStateChangedHandler; } IsReady = _incompleteDependencies.Count == 0; task.StateChanged += TaskStateChangedHandler; task.ProgressChanged += TaskProgressChangedHandler; task.ProgressMessageChanged += TaskProgressMessageChangeHandler; IsObsolete = task.State != TaskState.Obsolete; HasEnded = task.State == TaskState.Succeeded || task.State == TaskState.Failed || Task.State == TaskState.Canceled; }
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; } }