Example #1
0
        private async Task Connect(CancellationToken cancellationToken)
        {
            await Task.Yield();

            try
            {
                while (true)
                {
                    var proxy = new ProducerProxy(_stateManager);

                    await using (Stream = await _streamFactory.CreateStream(proxy, cancellationToken))
                    {
                        proxy.Connected();
                        await _stateManager.StateChangedFrom(ProducerState.Connected, cancellationToken);

                        if (_stateManager.IsFinalState())
                        {
                            return;
                        }
                    }
                }
            }
            catch (OperationCanceledException)
            {
                HasClosed();
            }
            catch (Exception exception)
            {
                HasFaulted(exception);
            }
        }
Example #2
0
 public Producer(IProducerStreamFactory streamFactory, IFaultStrategy faultStrategy)
 {
     _executor           = new Executor(ExecutorOnException);
     _streamFactory      = streamFactory;
     _faultStrategy      = faultStrategy;
     _stateManager       = new StateManager <ProducerState>(ProducerState.Disconnected, ProducerState.Closed, ProducerState.Faulted);
     _connectTokenSource = new CancellationTokenSource();
     Stream                  = new NotReadyStream();
     _connectTask            = Connect(_connectTokenSource.Token);
     _throwIfClosedOrFaulted = () => { };
 }