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;
        }
        [System.Runtime.CompilerServices.NullableContext(1)]
        public IDisposable RegisterChangeCallback([System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            2
        })] Action<object> callback, [System.Runtime.CompilerServices.Nullable(2)] object state)
        {
            return ChangeCallbackRegistrar.UnsafeRegisterChangeCallback(callback, state, Token, delegate(CancellationChangeToken s) {
                s.ActiveChangeCallbacks = false;
            }, this);
        }
    }
}