internal StreamImpl(InternalStreamId streamId, IInternalStreamProvider provider, bool isRewindable, IRuntimeClient runtimeClient) { this.streamId = streamId; this.provider = provider ?? throw new ArgumentNullException(nameof(provider)); this.runtimeClient = runtimeClient ?? throw new ArgumentNullException(nameof(runtimeClient)); producerInterface = null; consumerInterface = null; initLock = new object(); this.isRewindable = isRewindable; }
internal StreamImpl(StreamId streamId, IInternalStreamProvider provider, bool isRewindable) { if (null == streamId) { throw new ArgumentNullException("streamId"); } if (null == provider) { throw new ArgumentNullException("provider"); } this.streamId = streamId; this.provider = provider; producerInterface = null; consumerInterface = null; initLock = new object(); this.isRewindable = isRewindable; }
internal IInternalAsyncObservable <T> GetConsumerInterface() { if (consumerInterface == null) { lock (initLock) { if (consumerInterface == null) { if (provider == null) { provider = GetStreamProvider(); } consumerInterface = provider.GetConsumerInterface <T>(this); } } } return(consumerInterface); }
internal IInternalAsyncBatchObserver <T> GetProducerInterface() { if (producerInterface != null) { return(producerInterface); } lock (initLock) { if (producerInterface != null) { return(producerInterface); } if (provider == null) { provider = GetStreamProvider(); } producerInterface = provider.GetProducerInterface(this); } return(producerInterface); }