public void ValueAdded(INode <SmartValue> node, SmartValue value) { if (Interlocked.Increment(ref _count) == _expected) { _source.SetCompleted(); } }
public void ValueRemoved(INode <T> node, T value) { if (Interlocked.Increment(ref _count) == _expected) { _source.SetCompleted(); } }
Task IFilter <T> .Send(T context, IPipe <T> next) { _latest = context; _hasValue.SetCompleted(); return(next.Send(context)); }
Task IRetryObserver.PostFault <T>(RetryContext <T> context) { Interlocked.Increment(ref _postFaultCount); _postFault.SetCompleted(); return(TaskUtil.Completed); }
/// <summary> /// Puts the agent in a ready state, explicitly /// </summary> public virtual void SetReady() { _ready.SetCompleted(); }
/// <summary> /// Stops the agent /// </summary> /// <param name="context"></param> /// <returns></returns> protected virtual Task StopAgent(StopContext context) { _completed.SetCompleted(); return(TaskUtil.Completed); }
/// <summary> /// Set the agent Completed for duty /// </summary> /// <param name="completedTask"></param> protected void SetCompleted(Task completedTask) { lock (_completed) { if (_setCompleted != null) { // if a previous completedTask is already completed, no sense in trying if (_setCompleted.Task.IsCompleted) { return; } _setCompletedCancel.Cancel(); _setCompleted = null; _setCompletedCancel = null; } if (_completed.Task.IsCompleted) { return; } var setCompletedCancel = _setCompletedCancel = new CancellationTokenSource(); void OnSetCompleted(Task <bool> task) { if (setCompletedCancel.IsCancellationRequested) { return; } if (task.IsCanceled) { _completed.TrySetCanceled(); } else if (task.IsFaulted) { // ReSharper disable once AssignNullToNotNullAttribute _completed.TrySetException(task.Exception); } else { _completed.TrySetResult(task.Result); } } TaskCompletionSource <bool> setCompleted = _setCompleted = TaskUtil.GetTask(); setCompleted.Task.ContinueWith(OnSetCompleted, TaskScheduler.Default); void OnCompleted(Task task) { if (setCompletedCancel.IsCancellationRequested) { return; } if (task.IsCanceled) { setCompleted.TrySetCanceled(); } else if (task.IsFaulted) { // ReSharper disable once AssignNullToNotNullAttribute setCompleted.TrySetException(task.Exception); } else { setCompleted.SetCompleted(); } } completedTask.ContinueWith(OnCompleted, TaskScheduler.Default); } }