重写了节点的view、viewmodel关系,实现了对画布元素的选取功能,重构了底层依赖,添加了对net .Framework4.6.1以上的Framework类库支持

This commit is contained in:
fengjiayi
2024-09-12 20:32:54 +08:00
parent ec6e09ced1
commit f286fc644a
120 changed files with 91218 additions and 761 deletions

View File

@@ -17,7 +17,8 @@ namespace Serein.NodeFlow.Tool
{
//public ConcurrentDictionary<TSignal, Queue<TaskCompletionSource<object>>> TcsEvent { get; } = new();
public ConcurrentDictionary<TSignal, TaskCompletionSource<object>> TcsEvent { get; } = new();
public ConcurrentDictionary<TSignal, object> TcsValue { get; } = new();
public ConcurrentDictionary<TSignal, object> TcsLock { get; } = new();
/// <summary>
/// 触发信号
@@ -28,30 +29,36 @@ namespace Serein.NodeFlow.Tool
/// <returns>是否成功触发</returns>
public bool TriggerSignal<T>(TSignal signal, T value)
{
if (TcsEvent.TryRemove(signal, out var waitTcs))
var tcsLock = TcsLock.GetOrAdd(signal, new object());
lock (tcsLock)
{
waitTcs.SetResult(value);
return true;
if (TcsEvent.TryRemove(signal, out var waitTcs))
{
waitTcs.SetResult(value);
return true;
}
return false;
}
return false;
}
public TaskCompletionSource<object> CreateTcs(TSignal signal)
{
var tcs = TcsEvent.GetOrAdd(signal,_ = new TaskCompletionSource<object>());
return tcs;
var tcsLock = TcsLock.GetOrAdd(signal, new object());
lock (tcsLock)
{
var tcs = TcsEvent.GetOrAdd(signal, new TaskCompletionSource<object>());
return tcs;
}
}
public void CancelTask()
{
lock (TcsEvent)
foreach (var tcs in TcsEvent.Values)
{
foreach (var tcs in TcsEvent.Values)
{
tcs.SetException(new TcsSignalException("任务取消"));
}
TcsEvent.Clear();
tcs.SetException(new TcsSignalException("任务取消"));
}
TcsEvent.Clear();
}
}
}