private void SubThreadWorkDoneHandler(WorkThread workThread) { if (_actionsQueue.TryDequeue(out Action result)) { workThread.Do(result); return; } lock (_locker) { _workingThreads.Remove(workThread); _idleThreads.Add(workThread); if (_actionsQueue.IsEmpty && _workingThreads.Count == 0) { TaskManagerWorkDone?.Invoke(); } } }
private void SubThreadWorkDoneHandler(WorkThread workThread) { if (_actionsQueue.TryDequeue(out Action result)) { workThread.Do(result); return; } lock (_locker) { _workingThreads.Remove(workThread); _idleThreads.Add(workThread); if (_actionsQueue.IsEmpty && _workingThreads.Count == 0) { //TaskManagerWorkDone?.Invoke();//добавил цикл по закрытию потоков foreach (var thrd in _idleThreads) { thrd.Terminate(); } TaskManagerWorkDone?.Invoke(); } } }