84 lines
2.1 KiB
C#
84 lines
2.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
|
|
namespace ZC
|
|
{
|
|
public interface ITokenInfo
|
|
{
|
|
public int id { get; }
|
|
public bool isDispose { get; }
|
|
public CancellationTokenSource ets { get; }
|
|
public CancellationToken token { get; }
|
|
public void Add(Action callback);
|
|
public void Remove(Action callback);
|
|
public void Cancel();
|
|
public void Dispose();
|
|
}
|
|
|
|
public class TokenInfo : ITokenInfo
|
|
{
|
|
private int _id;
|
|
public bool _isDispose;
|
|
private CancellationTokenSource _ets;
|
|
private List<Action> callbacks;
|
|
|
|
public int id => this._id;
|
|
public CancellationTokenSource ets => this._ets;
|
|
public CancellationToken token => this._ets.Token;
|
|
public bool isDispose => this._isDispose;
|
|
|
|
public Action<TokenInfo> DisposeAction;
|
|
|
|
public TokenInfo(int id)
|
|
{
|
|
this._id = id;
|
|
this.callbacks = new List<Action>();
|
|
}
|
|
|
|
public void Init()
|
|
{
|
|
this._ets = new CancellationTokenSource();
|
|
this._ets.Token.Register(this.Callback);
|
|
this._isDispose = false;
|
|
}
|
|
|
|
private void Callback()
|
|
{
|
|
if (this.callbacks.Count > 0)
|
|
foreach (var callback in this.callbacks)
|
|
{
|
|
callback?.Invoke();
|
|
}
|
|
}
|
|
|
|
public void Add(Action callback)
|
|
{
|
|
this.callbacks.Add(callback);
|
|
}
|
|
|
|
public void Remove(Action callback)
|
|
{
|
|
if (this.callbacks.Contains(callback))
|
|
this.callbacks.Remove(callback);
|
|
}
|
|
|
|
public void Cancel()
|
|
{
|
|
this._ets.Cancel();
|
|
this.Dispose();
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (this._isDispose) return;
|
|
|
|
this._id = 0;
|
|
this._ets.Dispose();
|
|
this.callbacks.Clear();
|
|
this._ets = null;
|
|
this._isDispose = true;
|
|
this.DisposeAction?.Invoke(this);
|
|
}
|
|
}
|
|
} |