public void Execute(IResultSaver saver) { var queue = new WordsCountQueue(); _stopEvent = new ManualResetEventSlim(false); var marger = new Marger(_fileNamesSource.FileNames.Count, queue, saver, _stopEvent, ApplExceptionHandler); foreach (var fileName in _fileNamesSource.FileNames) { var analizer = new FileAnalizer(fileName, queue, ApplExceptionHandler); analizer.Execute(); } // здесь выполнение остановится, пока (marger или exception) не просигнализирует об окончании работы _stopEvent.Wait(); if (_wasException != null) { throw new ApplicationException("Ошибка в дочернем потоке", _wasException); } saver.Save(); }
public void Register(FileAnalizer analizer) { _fileAnalyzers.Add(analizer); }