mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-03-15 14:06:37 +08:00
先想到这吧
This commit is contained in:
@@ -46,39 +46,38 @@ namespace Serein.Library.NodeFlow.Tool
|
||||
public async Task<TriggerData> CreateChannelWithTimeoutAsync<TResult>(TSignal signal, TimeSpan outTime, TResult outValue)
|
||||
{
|
||||
var channel = GetOrCreateChannel(signal);
|
||||
//var cts = new CancellationTokenSource();
|
||||
//// 异步任务:超时后自动触发信号
|
||||
//_ = Task.Run(async () =>
|
||||
//{
|
||||
// try
|
||||
// {
|
||||
// await Task.Delay(outTime, cts.Token);
|
||||
// if(!cts.IsCancellationRequested) // 如果还没有被取消
|
||||
// {
|
||||
// TriggerData triggerData = new TriggerData()
|
||||
// {
|
||||
// Value = outValue,
|
||||
// Type = TriggerType.Overtime,
|
||||
// };
|
||||
// await channel.Writer.WriteAsync(triggerData);
|
||||
// }
|
||||
// }
|
||||
// catch (OperationCanceledException)
|
||||
// {
|
||||
// // 超时任务被取消
|
||||
// }
|
||||
// finally
|
||||
// {
|
||||
// cts?.Cancel();
|
||||
// cts?.Dispose(); // 确保 cts 被释放
|
||||
// }
|
||||
//}, cts.Token);
|
||||
var cts = new CancellationTokenSource();
|
||||
// 异步任务:超时后自动触发信号
|
||||
_ = Task.Run(async () =>
|
||||
{
|
||||
try
|
||||
{
|
||||
await Task.Delay(outTime, cts.Token);
|
||||
if(!cts.IsCancellationRequested) // 如果还没有被取消
|
||||
{
|
||||
TriggerData triggerData = new TriggerData()
|
||||
{
|
||||
Value = outValue,
|
||||
Type = TriggerType.Overtime,
|
||||
};
|
||||
await channel.Writer.WriteAsync(triggerData);
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// 超时任务被取消
|
||||
}
|
||||
finally
|
||||
{
|
||||
cts?.Cancel();
|
||||
cts?.Dispose(); // 确保 cts 被释放
|
||||
}
|
||||
}, cts.Token);
|
||||
|
||||
|
||||
// 等待信号传入(超时或手动触发)
|
||||
var result = await channel.Reader.ReadAsync();
|
||||
//cts?.Cancel();
|
||||
//cts?.Dispose();
|
||||
cts?.Cancel();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
35
Library/Utils/EnumHelper.cs
Normal file
35
Library/Utils/EnumHelper.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using Serein.Library.Attributes;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
namespace Serein.Library.Utils
|
||||
{
|
||||
public static class EnumHelper
|
||||
{
|
||||
public static TResult GetBoundValue<TEnum, TResult>(TEnum enumValue, Func<BindValueAttribute, object> valueSelector)
|
||||
where TEnum : Enum
|
||||
{
|
||||
var fieldInfo = typeof(TEnum).GetField(enumValue.ToString());
|
||||
var attribute = fieldInfo.GetCustomAttribute<BindValueAttribute>();
|
||||
|
||||
return attribute != null ? (TResult)valueSelector(attribute) : default;
|
||||
}
|
||||
|
||||
//public static TResult GetBoundValue<TEnum, TAttribute, TResult>(TEnum enumValue,
|
||||
// Func<TAttribute, TResult> valueSelector)
|
||||
// where TEnum : Enum
|
||||
// where TAttribute : Attribute
|
||||
//{
|
||||
// var fieldInfo = typeof(TEnum).GetField(enumValue.ToString());
|
||||
// var attribute = fieldInfo.GetCustomAttribute<TAttribute>();
|
||||
|
||||
// return attribute != null ? valueSelector(attribute) : default;
|
||||
//}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user