CancellationChangeToken
A IChangeToken implementation using CancellationToken.
using Microsoft.Extensions.Internal;
using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Threading;
namespace Microsoft.Extensions.Primitives
{
[DebuggerDisplay("HasChanged = {HasChanged}")]
public class CancellationChangeToken : IChangeToken
{
public bool ActiveChangeCallbacks { get; set; } = true;
public bool HasChanged => Token.IsCancellationRequested;
private CancellationToken Token { get; }
public CancellationChangeToken(CancellationToken cancellationToken)
{
Token = cancellationToken;
}
[NullableContext(1)]
public IDisposable RegisterChangeCallback([Nullable(new byte[] {
1,
2
})] Action<object> callback, [Nullable(2)] object state)
{
return ChangeCallbackRegistrar.UnsafeRegisterChangeCallback(callback, state, Token, delegate(CancellationChangeToken s) {
s.ActiveChangeCallbacks = false;
}, this);
}
}
}