You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
using System;
|
|
|
|
|
using System.Threading;
|
|
|
|
|
|
|
|
|
|
namespace ZeroLevel.Services.Async
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// A <see cref="Token"/> that may or may not also reference its own <see cref="CancellationTokenSource"/>. Instances of this type should always be disposed.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public sealed class NormalizedCancellationToken : IDisposable
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The <see cref="CancellationTokenSource"/>, if any. If this is not <c>null</c>, then <see cref="_token"/> is <c>_cts.Token</c>.
|
|
|
|
|
/// </summary>
|
|
|
|
|
private readonly CancellationTokenSource _cts;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// The <see cref="Token"/>. If <see cref="_cts"/> is not <c>null</c>, then this is <c>_cts.Token</c>.
|
|
|
|
|
/// </summary>
|
|
|
|
|
private readonly CancellationToken _token;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Creates a normalized cancellation token that can never be canceled.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public NormalizedCancellationToken()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Creates a normalized cancellation token from a <see cref="CancellationTokenSource"/>. <see cref="Token"/> is set to the <see cref="CancellationTokenSource.Token"/> property of <paramref name="cts"/>.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="cts">The source for this token.</param>
|
|
|
|
|
public NormalizedCancellationToken(CancellationTokenSource cts)
|
|
|
|
|
{
|
|
|
|
|
_cts = cts;
|
|
|
|
|
_token = cts.Token;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Creates a normalized cancellation token from a <see cref="CancellationToken"/>. <see cref="Token"/> is set to <paramref name="token"/>.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="token">The source for this token.</param>
|
|
|
|
|
public NormalizedCancellationToken(CancellationToken token)
|
|
|
|
|
{
|
|
|
|
|
_token = token;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Releases any resources used by this normalized cancellation token.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void Dispose()
|
|
|
|
|
{
|
|
|
|
|
if (_cts != null)
|
|
|
|
|
_cts.Dispose();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Gets the <see cref="CancellationToken"/> for this normalized cancellation token.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public CancellationToken Token { get { return _token; } }
|
|
|
|
|
}
|
|
|
|
|
}
|