1. 重新设计了Generate项目及相关特性的命名,避免与其他类型混淆。

2. 补充了部分注释。
3. 修改了删除容器节点时,容器内子节点未正确删除的问题。
This commit is contained in:
fengjiayi
2025-07-30 21:15:07 +08:00
parent 93148b11a5
commit 152077e9b5
188 changed files with 2713 additions and 1406 deletions

View File

@@ -9,6 +9,10 @@ using System.Threading.Tasks;
namespace Serein.Library.Utils
{
/// <summary>
/// 基于 Channel 的触发器实现
/// </summary>
/// <typeparam name="TSignal"></typeparam>
public class ChannelFlowTrigger<TSignal> : IFlowTrigger<TSignal>
{
// 使用并发字典管理每个枚举信号对应的 Channel
@@ -24,6 +28,13 @@ namespace Serein.Library.Utils
return _channels.GetOrAdd(signal, _ => Channel.CreateUnbounded<TriggerResult<object>>());
}
/// <summary>
/// 等待信号触发并指定超时时间
/// </summary>
/// <typeparam name="TResult"></typeparam>
/// <param name="signal"></param>
/// <param name="outTime"></param>
/// <returns></returns>
public async Task<TriggerResult<TResult>> WaitTriggerWithTimeoutAsync<TResult>(TSignal signal, TimeSpan outTime)
{
var channel = GetOrCreateChannel(signal);
@@ -54,6 +65,12 @@ namespace Serein.Library.Utils
}
/// <summary>
/// 等待信号触发
/// </summary>
/// <typeparam name="TResult"></typeparam>
/// <param name="signal"></param>
/// <returns></returns>
public async Task<TriggerResult<TResult>> WaitTriggerAsync<TResult>(TSignal signal)
{
var channel = GetOrCreateChannel(signal);
@@ -76,6 +93,13 @@ namespace Serein.Library.Utils
}
}
/// <summary>
/// 调用触发器
/// </summary>
/// <typeparam name="TResult"></typeparam>
/// <param name="signal"></param>
/// <param name="value"></param>
/// <returns></returns>
public async Task<bool> InvokeTriggerAsync<TResult>(TSignal signal, TResult value)
{
if (_channels.TryGetValue(signal, out var channel))
@@ -92,6 +116,9 @@ namespace Serein.Library.Utils
return false;
}
/// <summary>
/// 取消所有触发器
/// </summary>
public void CancelAllTrigger()
{
foreach (var channel in _channels.Values)