internal void Run()
        {
            if (CurrentCount != 0)
            {
                try
                {
                    Wait();
                }
                catch (ObjectDisposedException)
                {
                    return;
                }
            }
            var ex = error;

            if (ex != ExceptionHelper.TERMINATED)
            {
                downstream.OnError(ex);
            }
            else
            {
                downstream.OnCompleted();
            }
        }
            public void OnCompleted()
            {
                upstream = DisposableHelper.DISPOSED;

                try
                {
                    onCompleted?.Invoke();
                }
                catch (Exception ex)
                {
                    Error(ex, true);
                    return;
                }

                try
                {
                    onTerminate?.Invoke();
                }
                catch (Exception ex)
                {
                    Error(ex, false);
                    return;
                }

                downstream.OnCompleted();

                try
                {
                    onAfterTerminate?.Invoke();
                } catch (Exception)
                {
                    // FIXME what should happen with the exception
                }

                Finally();
            }
 internal void Run()
 {
     for (; ;)
     {
         var d = Volatile.Read(ref task);
         if (d == DisposableHelper.DISPOSED)
         {
             break;
         }
         if (Interlocked.CompareExchange(ref task, DisposableHelper.EMPTY, d) == d)
         {
             var ex = error;
             if (ex != null)
             {
                 downstream.OnError(ex);
             }
             else
             {
                 downstream.OnCompleted();
             }
             break;
         }
     }
 }
示例#4
0
 public virtual void OnCompleted()
 {
     downstream.OnCompleted();
 }
示例#5
0
 public void OnCompleted()
 {
     upstream = null;
     downstream.OnCompleted();
 }
 public void OnCompleted()
 {
     DisposableHelper.WeakDispose(ref upstream);
     downstream.OnCompleted();
 }
 internal static void Complete(this ICompletableObserver observer)
 {
     observer.OnSubscribe(EMPTY);
     observer.OnCompleted();
 }