protected virtual Page <T> AddPage() { using (_pageHeaders.EnterWriteScope()) { Page <T> newPage; if (!_pageHeaders.Any()) { newPage = Page <T> .First; } else { var lastPage = _pageHeaders.Last(); newPage = new Page <T>(lastPage.PageNumber + 1, lastPage.EndIndex + 1); } _pageHeaders.Add(newPage); return(newPage); } }
public void Add(ILogger logger) { _loggers.Add(logger); }
public void Run(Stream input, Stream output) { if (_blockingStreams == null) { throw new ObjectDisposedException(GetType().Name); } if (input == null) { throw new ArgumentNullException("input"); } if (!input.CanRead) { throw new ArgumentException("input"); } if (output == null) { throw new ArgumentNullException("output"); } if (!output.CanWrite) { throw new ArgumentException("output"); } var errors = new SynchronizedList <Exception>(); ThreadStart lastStage = null; for (var i = 0; i < _filters.Length; i++) { var stageInput = i == 0 ? input : _blockingStreams[i - 1]; var stageOutput = i == _filters.Length - 1 ? output : _blockingStreams[i]; var filter = _filters[i]; ThreadStart stage = delegate { try { filter(stageInput, stageOutput); var blockingStream = stageOutput as BlockingStream; if (blockingStream != null) { blockingStream.SetEndOfStream(); } } catch (Exception error) { errors.Add(error); var blockingStream = stageOutput as BlockingStream; if (blockingStream != null) { blockingStream.SetEndOfStreamDueToFailure(); } } }; if (i < _filters.Length - 1) { var t = new Thread(stage) { IsBackground = true }; t.Start(); } else { lastStage = stage; } } if (!errors.Any()) { try { lastStage(); } catch (Exception error) { errors.Add(error); } } if (errors.Any()) { throw new AggregateException(errors); } }