private void Reset() { _nextMessageTask = TaskSource.New <RedisValue>(true).Task; if (IsDisposeStarted) { TaskSource.For(_nextMessageTask).TrySetCanceled(); } }
public bool TryCancel(CancellationToken cancellationToken = default) { if (CancellationToken.IsCancellationRequested) { TaskSource.For(OutputTask).TrySetCanceled(CancellationToken); } else if (cancellationToken.IsCancellationRequested) { TaskSource.For(OutputTask).TrySetCanceled(cancellationToken); } return(OutputTask.IsCanceled); }
protected static void EndDelay(ref Task <Unit> task, TimeSpan withDelay = default) { var newTask = TaskSource.New <Unit>(true).Task; var oldTask = Interlocked.Exchange(ref task, newTask); if (oldTask == null) { return; } if (withDelay == default) { TaskSource.For(oldTask).SetResult(default);
public void CancelDelays(TimeSpan?cancellationDelay = null) { var delay = Math.Max(0, (cancellationDelay ?? CancellationDelay).TotalSeconds); if (delay > 0) { Clock.DelayAsync(TimeSpan.FromSeconds(delay)).ContinueWith(_ => CancelDelays(TimeSpan.Zero)); return; } var newTask = TaskSource.New <Unit>(true).Task; var oldTask = Interlocked.Exchange(ref _cancelDelaysTask, newTask); if (oldTask != null) { TaskSource.For(oldTask).SetResult(default);
public void CancelDelays(bool immediately = false) { if (!immediately) { Clock .DelayAsync(CancelDelaysDelay, CancellationToken.None) .ContinueWith(_ => CancelDelays(true)); return; } var newTask = TaskSource.New <Unit>(true).Task; var oldTask = Interlocked.Exchange(ref _cancelDelaysTask, newTask); if (oldTask != null) { TaskSource.For(oldTask).SetResult(default);
public void SetResult(Result <TOut> result, CancellationToken candidateToken) => TaskSource.For(OutputTask).TrySetFromResult(result, candidateToken);
protected virtual void ReleaseWaitForChanges() { lock (Lock) TaskSource.For(NextEventTask).TrySetResult(default);
protected override void OnMessage(RedisChannel redisChannel, RedisValue redisValue) { lock (Lock) TaskSource.For(_nextMessageTask).TrySetResult(redisValue); }
protected override ValueTask DisposeAsyncInternal() { lock (Lock) TaskSource.For(_nextMessageTask).TrySetCanceled(); return(ValueTaskExt.CompletedTask); }