/// <summary> /// Сжатие и генерация задач записи работает в том количестве потоков, сколько процессоров доступно системе, /// давая распределённую и почти 100% нагрузку на все ядра процессора /// </summary> private void CompressingThread() { try { while (_lastZippedBlock < _totalCount && !_cancellationToken.IsCancellationRequested) { // Защита от переполнения памяти if (_writeTaskPool.TaskCount() > _maxTasks) { Thread.Sleep(_sleep); continue; } ITaskInfo taskInfo = _compressTaskPool.NextTask(); if (taskInfo == null) { Thread.Sleep(_sleep); continue; } _writeTaskPool.AddTask(_taskFactory.CreateWriteTaskInfo(taskInfo.GetId(), taskInfo.Execute(null) as byte[])); _lastZippedBlock++; } #if DEBUG Console.WriteLine("End of compressing"); #endif } catch (Exception exc) { Console.WriteLine("Error on file compressing"); #if DEBUG Console.WriteLine(exc); #endif } }
public void AddTask(ITaskInfo task) { lock (this) { _tasksInfo.Add(task.GetId(), task); } }