/// <summary> /// Режем входящий файл. /// </summary> /// <param name="fileSlicer">Резак...</param> private void SliseFile(FileSliser fileSlicer, ThreadCancelationToken token) { int partNumber = 0; var partCollection = FilePartCollection.GetInstance(); try { foreach (var partFilePath in fileSlicer.SliseFile()) { if (token.IsCancel) { break; } partCollection.AppendPartInfo(partNumber++, partFilePath); } // эта конструкция должна находиться здесь, для того что бы все остальные потоки прочухали // что что-то не так и откатили изменения. partCollection.End(); } catch (Exception e) { token.Cancel(e); } }
protected void HandleBase(IGZipCommand command, FileSliser fileSlicer, IGZipProcess gzipProcess, ThreadCancelationToken token) { var mergePartition = StartMergeThread(command.OutputFileInfo.FullName, token); List <Thread> threadPool = new List <Thread>(5); for (var i = 0; i < 6; i++) { threadPool.Add(StartGzipProcess(gzipProcess, token)); } SliseFile(fileSlicer, token); var partSequince = FilePartSequince.GetInstance(); foreach (var gzipThread in threadPool) { gzipThread.Join(); } partSequince.End(); mergePartition.Join(); }