/// <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); } }
private Thread StartGzipProcess(IGZipProcess gzipProcess, ThreadCancelationToken token) { Thread gzipThread = new Thread(param => { var cancelToken = param as ThreadCancelationToken; var partCollection = FilePartCollection.GetInstance(); var partSequince = FilePartSequince.GetInstance(); foreach (var partInfo in partCollection.GetFilePart()) { if (cancelToken.IsCancel) { break; } try { using (var partFileStream = new MemoryStream(partInfo.content)) { var gzipPath = gzipProcess.Process(partInfo.partNumber, partFileStream); partSequince.AppendPartInfo(partInfo.partNumber, gzipPath); } } catch (Exception e) { cancelToken.Cancel(e); } } }); gzipThread.Start(token); return(gzipThread); }