添加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