添加token池
parent
babf5b2dd7
commit
741a6588ff
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 2de8906198a5f2d4889795ad418a7418
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,84 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 3fe3e1c90d1f442c9b5b248b671c9321
|
||||
timeCreated: 1718952740
|
|
@ -0,0 +1,35 @@
|
|||
using System.Collections.Generic;
|
||||
|
||||
namespace ZC
|
||||
{
|
||||
public static class TokenPool
|
||||
{
|
||||
private static List<TokenInfo> runningInfos = new List<TokenInfo>();
|
||||
private static List<TokenInfo> disposeInfos = new List<TokenInfo>();
|
||||
|
||||
public static ITokenInfo GetToken()
|
||||
{
|
||||
TokenInfo info;
|
||||
if (disposeInfos.Count <= 0)
|
||||
{
|
||||
info = new TokenInfo(1);
|
||||
info.DisposeAction = Dispose;
|
||||
}
|
||||
else
|
||||
{
|
||||
info = disposeInfos[0];
|
||||
disposeInfos.RemoveAt(0);
|
||||
}
|
||||
|
||||
info.Init();
|
||||
runningInfos.Add(info);
|
||||
return info;
|
||||
}
|
||||
|
||||
private static void Dispose(TokenInfo info)
|
||||
{
|
||||
runningInfos.Remove(info);
|
||||
disposeInfos.Add(info);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 5ca25565713545c080d1504d68cb7f3f
|
||||
timeCreated: 1718952695
|
|
@ -0,0 +1,29 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using Cysharp.Threading.Tasks;
|
||||
|
||||
namespace ZC
|
||||
{
|
||||
public static class UniTaskPool
|
||||
{
|
||||
private static List<UniTaskInfo> runningInfos = new List<UniTaskInfo>();
|
||||
private static List<UniTaskInfo> disposeInfos = new List<UniTaskInfo>();
|
||||
|
||||
public static void Get(UniTask task)
|
||||
{
|
||||
UniTaskInfo info = new UniTaskInfo(task);
|
||||
info._info.Cancel();
|
||||
}
|
||||
}
|
||||
|
||||
public class UniTaskInfo
|
||||
{
|
||||
private UniTask _task;
|
||||
public TokenInfo _info;
|
||||
|
||||
public UniTaskInfo(UniTask task)
|
||||
{
|
||||
this._task = task;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: fd3f2b265794484ba07b73bbc2adde50
|
||||
timeCreated: 1719125352
|
Loading…
Reference in New Issue