添加token池

pull/1/head
zhangxl 2024-07-19 10:53:06 +08:00
parent babf5b2dd7
commit 741a6588ff
7 changed files with 165 additions and 0 deletions

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2de8906198a5f2d4889795ad418a7418
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 3fe3e1c90d1f442c9b5b248b671c9321
timeCreated: 1718952740

View File

@ -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);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 5ca25565713545c080d1504d68cb7f3f
timeCreated: 1718952695

View File

@ -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;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: fd3f2b265794484ba07b73bbc2adde50
timeCreated: 1719125352