Exemplo n.º 1
0
 private bool TryDispose()
 {
     if (Interlocked.Decrement(ref _disposeWip) != 0)
     {
         ResumeHelper.Complete(ref _disposeTask, _source.DisposeAsync());
         return(false);
     }
     return(true);
 }
Exemplo n.º 2
0
 private bool TryDispose()
 {
     if (Interlocked.Decrement(ref _disposeWip) != 0)
     {
         Interlocked.Exchange(ref _timerLatest, EmptyHelper.EmptyIndicator);
         ResumeHelper.Complete(ref _disposeTask, _source.DisposeAsync());
         return(false);
     }
     return(true);
 }
Exemplo n.º 3
0
            private void SourceHandler(Task <bool> t)
            {
                var next = false;

                if (t.IsFaulted)
                {
                    _error = ExceptionHelper.Extract(t.Exception);
                    _done  = true;
                }
                else if (t.IsCanceled)
                {
                    _error = new OperationCanceledException();
                    _done  = true;
                }
                else if (t.Result)
                {
                    _queue.Enqueue(_source.Current);
                    next = true;
                }
                else
                {
                    _done = true;
                }
                // release the MoveNext, just in case
                if (Interlocked.Decrement(ref _disposeWip) != 0)
                {
                    ResumeHelper.Complete(ref _disposeTask, _source.DisposeAsync());
                }
                else
                {
                    if (next && Interlocked.Decrement(ref _outstanding) != 0)
                    {
                        MoveNext();
                    }

                    Signal();
                }
            }
Exemplo n.º 4
0
 private void DisposeTask()
 {
     ResumeHelper.Complete(ref _disposeTask, _source.DisposeAsync());
 }