Пример #1
0
 public Worker(IMessageVisitorFactory msgVisitorFactory, Func <TIn, TOut> funWork, Func <ISharedPipe <IMessage> > pipeFactory, bool shouldStopOnError)
 {
     _funWork             = funWork;
     _msgVisitor          = msgVisitorFactory.Create(this);
     OnEndOfStream       += OnEndOfStreamHandler;
     (_toReader, _writer) = pipeFactory().GetReaderWriterCouple();
     // Dispose handler
     _unsubscriber = new Unsubscriber();
     // unsubscribe the event on dispose
     _unsubscriber.RegisterSubscription(() => OnEndOfStream -= OnEndOfStreamHandler);
 }
Пример #2
0
        public void PipeFrom(IReadable <IMessage> reader)
        {
            _fromReader = reader;
            if (_fromReader.Reader.TryRegisterReaderHandler((msg) => msg.Accept(_msgVisitor), out int id))
            {
                void UnsubscribeFromReader()
                {
                    _fromReader.Reader.TryUnregisterReaderHandler(id);
                    _fromReader.Dispose();
                }

                // unsubscribe the message handler, then dispose the from reader.
                _unsubscriber.RegisterSubscription(UnsubscribeFromReader);
            }
        }