internal bool TryConnect( IPublisher <T> source, Action <IDisposable> action, Func <IProcessor <T, T> > processorSupplier, Func <IFlux <T>, IPublisher <U> > selector) { if (Volatile.Read(ref done) != 0) { return(false); } if (Interlocked.CompareExchange(ref once, 1, 0) == 0) { try { processor = processorSupplier(); result = selector(Flux.Wrap(processor)); } catch (Exception ex) { ExceptionHelper.ThrowIfFatal(ex); Volatile.Write(ref done, 1); foreach (var s in subscribers.Terminate()) { EmptySubscription <U> .Error(s, ex); } return(false); } foreach (var s in subscribers.Terminate()) { result.Subscribe(s); } action?.Invoke(this); source.Subscribe(this); } return(true); }