Beispiel #1
0
 private void Reset()
 {
     _nextMessageTask = TaskSource.New <RedisValue>(true).Task;
     if (IsDisposeStarted)
     {
         TaskSource.For(_nextMessageTask).TrySetCanceled();
     }
 }
Beispiel #2
0
 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);
 }
Beispiel #3
0
        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);
Beispiel #4
0
        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);
Beispiel #6
0
 public void SetResult(Result <TOut> result, CancellationToken candidateToken)
 => TaskSource.For(OutputTask).TrySetFromResult(result, candidateToken);
Beispiel #7
0
 protected virtual void ReleaseWaitForChanges()
 {
     lock (Lock)
         TaskSource.For(NextEventTask).TrySetResult(default);
Beispiel #8
0
 protected override void OnMessage(RedisChannel redisChannel, RedisValue redisValue)
 {
     lock (Lock)
         TaskSource.For(_nextMessageTask).TrySetResult(redisValue);
 }
Beispiel #9
0
 protected override ValueTask DisposeAsyncInternal()
 {
     lock (Lock)
         TaskSource.For(_nextMessageTask).TrySetCanceled();
     return(ValueTaskExt.CompletedTask);
 }