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); }
public void Merge(string outputhPath, ThreadCancelationToken token) { var filePartSequince = FilePartSequince.GetInstance(); var outputFile = OutputFileInfo.GetInstance(outputhPath); using (outputFile) { foreach (var filePartPath in filePartSequince.GetFilePart()) { if (token.IsCancel) { outputFile.Delete(); break; } try { outputFile.AppendPart(filePartPath); } catch (Exception e) { outputFile.Delete(); token.Cancel(e); } } if (token.IsCancel) { outputFile.Delete(); } } }
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(); }