Skip to content

Commit

Permalink
Merge pull request ravendb#16819 from ppekrol/v6.0
Browse files Browse the repository at this point in the history
5.4 to 6.0 merge
  • Loading branch information
ppekrol authored Jul 7, 2023
2 parents b39aa49 + 0c8e039 commit ee38116
Showing 1 changed file with 42 additions and 7 deletions.
49 changes: 42 additions & 7 deletions src/Raven.Server/ServerWide/OperationCancelToken.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ namespace Raven.Server.ServerWide
{
public class OperationCancelToken : IDisposable
{
public static OperationCancelToken None = new OperationCancelToken(CancellationToken.None, CancellationToken.None);
public static readonly OperationCancelToken None = new(CancellationToken.None);

private readonly CancellationTokenSource _cts;
private bool _disposed;
Expand All @@ -15,19 +15,48 @@ public class OperationCancelToken : IDisposable

public readonly CancellationToken Token;

public OperationCancelToken(TimeSpan cancelAfter, params CancellationToken[] tokens)
public OperationCancelToken(TimeSpan cancelAfter, CancellationToken token)
{
if (cancelAfter != Timeout.InfiniteTimeSpan && cancelAfter < TimeSpan.Zero)
throw new ArgumentOutOfRangeException(nameof(cancelAfter));
ValidateCancelAfter(cancelAfter);

_cts = CancellationTokenSource.CreateLinkedTokenSource(token);
_cancelAfter = cancelAfter;
Token = _cts.Token;
_cts.CancelAfter(cancelAfter);
}

_cts = CancellationTokenSource.CreateLinkedTokenSource(tokens);
public OperationCancelToken(TimeSpan cancelAfter, CancellationToken token1, CancellationToken token2)
{
ValidateCancelAfter(cancelAfter);

_cts = CancellationTokenSource.CreateLinkedTokenSource(token1, token2);
_cancelAfter = cancelAfter;
Token = _cts.Token;
_cts.CancelAfter(cancelAfter);
}

public OperationCancelToken(params CancellationToken[] tokens)
: this(Timeout.InfiniteTimeSpan, tokens)
public OperationCancelToken(TimeSpan cancelAfter, CancellationToken token1, CancellationToken token2, CancellationToken token3)
{
ValidateCancelAfter(cancelAfter);

_cts = CancellationTokenSource.CreateLinkedTokenSource(token1, token2, token3);
_cancelAfter = cancelAfter;
Token = _cts.Token;
_cts.CancelAfter(cancelAfter);
}

public OperationCancelToken(CancellationToken token)
: this(Timeout.InfiniteTimeSpan, token)
{
}

public OperationCancelToken(CancellationToken token1, CancellationToken token2)
: this(Timeout.InfiniteTimeSpan, token1, token2)
{
}

public OperationCancelToken(CancellationToken token1, CancellationToken token2, CancellationToken token3)
: this(Timeout.InfiniteTimeSpan, token1, token2, token3)
{
}

Expand Down Expand Up @@ -93,5 +122,11 @@ private void DisposeInternal()

_cts?.Dispose();
}

private static void ValidateCancelAfter(TimeSpan cancelAfter)
{
if (cancelAfter != Timeout.InfiniteTimeSpan && cancelAfter < TimeSpan.Zero)
throw new ArgumentOutOfRangeException(nameof(cancelAfter));
}
}
}

0 comments on commit ee38116

Please sign in to comment.