< Summary

Information
Class: Amusoft.Toolkit.Threading.DebounceStack<T>
Assembly: Amusoft.Toolkit.Threading
File(s): /home/runner/work/Amusoft.Toolkit.Threading/Amusoft.Toolkit.Threading/src/Amusoft.Toolkit.Threading/DebounceStack.cs
Tag: 19_10540409038
Line coverage
100%
Covered lines: 9
Uncovered lines: 0
Coverable lines: 9
Total lines: 34
Line coverage: 100%
Branch coverage
50%
Covered branches: 2
Total branches: 4
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%
get_Task()100%11100%
CancelAndUpdate(...)50%44100%

File(s)

/home/runner/work/Amusoft.Toolkit.Threading/Amusoft.Toolkit.Threading/src/Amusoft.Toolkit.Threading/DebounceStack.cs

#LineLine coverage
 1using System;
 2using System.Threading;
 3using System.Threading.Tasks;
 4
 5namespace Amusoft.Toolkit.Threading;
 6
 7/// <summary>
 8///
 9/// </summary>
 10/// <typeparam name="T"></typeparam>
 11internal class DebounceStack<T> : DebounceStack
 12{
 313  private readonly TaskCompletionSource<T> _tcs = new();
 314  private CancellationTokenSource? _cts = new();
 15  private Task<T>? _loader;
 16
 17  /// <summary>
 18  ///
 19  /// </summary>
 820  internal Task<T> Task => _tcs.Task;
 21
 22  internal void CancelAndUpdate(Func<CancellationToken, Task<T>> expression)
 23  {
 524    _cts?.Cancel(false);
 525    _cts?.Dispose();
 526    _cts = new();
 527    _loader = expression(_cts.Token);
 1028    _loader.ContinueWith(r => _tcs.SetResult(r.Result));
 529  }
 30}
 31
 32internal abstract class DebounceStack
 33{
 34}