Ejemplo n.º 1
0
            public IDisposable Subscribe(IObserver <T> observer)
            {
                var consumer = new ObserverWithToken <T>(observer);

                //
                // [OK] Use of unsafe Subscribe: non-pretentious transparent wrapping through remoting; exception coming from the remote object is not re-routed.
                //
                var d = remotableObservable.Subscribe/*Unsafe*/ (new RemotableObserver <T>(consumer));

                consumer.SetTokenDisposable(d);

                return(d);
            }
Ejemplo n.º 2
0
        private static void Subscribe_ <T>(this IObservable <T> source, IObserver <T> observer, CancellationToken token)
        {
            if (token.CanBeCanceled)
            {
                if (!token.IsCancellationRequested)
                {
                    var consumer = new ObserverWithToken <T>(observer);

                    //
                    // [OK] Use of unsafe Subscribe: exception during Subscribe doesn't orphan CancellationTokenRegistration.
                    //
                    var d = source.Subscribe/*Unsafe*/ (consumer);

                    consumer.SetTokenDisposable(token.Register(state => ((IDisposable)state).Dispose(), d));
                }
            }
            else
            {
                source.Subscribe(observer);
            }
        }