public override void Start() { PrepareInFileStream(); PrepareOutFileStream(); var writeThread = ThreadManager.GetSafeThread(WriteBlocks, ExceptionHandler); writeThread.StartWithPriority(ThreadPriority.BelowNormal); var compressThreads = ThreadManager.GetSafeThreads(_numReadThreads, CompressBlocks, ExceptionHandler); compressThreads.StartThreads(ThreadPriority.AboveNormal); compressThreads.WaitThreads().ContinueWithOneTime(() => { foreach (var p in _compressedBlocksProd) { p.Stop(); } }); writeThread.Join(); _inFileStream.Close(); _outFileStream.Close(); if (_errors.Any()) { OutFileInfo.Delete(); throw _errors.Dequeue(); } }
private void PrepareOutFileStream() { if (OutFileInfo.Extension.ToLower() != ".gz") { throw new FileExtensionException("Результирующий файл должен быть формата .gz"); } _outFileStream = OutFileInfo.Open(FileMode.Create, FileAccess.Write); }