示例#1
0
                public override void OnNext(IObservable <TSource> value)
                {
                    var innerObserver = new InnerObserver(this);

                    _group.Add(innerObserver);
                    innerObserver.SetResource(value.SubscribeSafe(innerObserver));
                }
示例#2
0
                private void Subscribe(IObservable <TSource> innerSource)
                {
                    var innerObserver = new InnerObserver(this);

                    _group.Add(innerObserver);
                    innerObserver.SetResource(innerSource.SubscribeSafe(innerObserver));
                }
示例#3
0
            public async ValueTask <bool> OnNextAsync(IAsyncObservable <T> value)
            {
                var inner = new InnerObserver(_observer);
                await value.SubscribeAsync(inner, _token).ConfigureAwait(false);

                return(inner.Keep);
            }
示例#4
0
        internal AmbCoordinator(IObserver <T> downstream, int n)
        {
            this.downstream = downstream;
            var o = new InnerObserver[n];

            for (int i = 0; i < n; i++)
            {
                o[i] = new InnerObserver(this, i);
            }
            observers = o;
            Volatile.Write(ref winner, -1);
        }
示例#5
0
            public override void OnNext(IObservable <TSource> value)
            {
                ulong id;

                lock (_gate)
                {
                    id         = unchecked (++_latest);
                    _hasLatest = true;
                }

                var innerObserver = new InnerObserver(this, id);

                Disposable.TrySetSerial(ref _innerSerialDisposable, innerObserver);
                innerObserver.SetResource(value.SubscribeSafe(innerObserver));
            }
示例#6
0
            public async override ValueTask OnNextAsync(IAsyncObservable <T> value)
            {
                if (IsCanceled)
                {
                    return;
                }

                var inner = new InnerObserver(this);

                try
                {
                    _inner = inner;
                    await value.SubscribeAsync(inner).ConfigureAwait(false);
                }
                catch (Exception error)
                {
                    _inner = null;
                    await SignalErrorAsync(error).ConfigureAwait(false);
                }
                _inner = null;
            }
示例#7
0
            public override ValueTask OnNextAsync(IAsyncObservable <T> value)
            {
                if (!IsCanceled)
                {
                    var inner = new InnerObserver(this);
                    var vt    = Subscribe(value, inner);

                    if (!vt.IsCompleted)
                    {
                        var t = vt.AsTask();
                        lock (_lock)
                        {
                            if (!t.IsCompleted)
                            {
                                _innerObs[inner] = t;
                            }
                        }
                    }
                }

                return(default);
示例#8
0
 internal ConcatManyOuterObserver(IObserver <T> downstream)
 {
     _downstream    = downstream;
     _queue         = new ConcurrentQueue <IObservable <T> >();
     _innerObserver = new InnerObserver(this);
 }
示例#9
0
 public OuterObserver(IObserver <T> observer)
 {
     this.observer = observer;
     innerObserver = new InnerObserver(this);
 }