示例#1
0
        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();
                }
            }
        }
示例#2
0
        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();
                }
            }
        }