This commit is contained in:
SoulliesOfficial
2025-10-24 09:11:22 -04:00
parent 61a397dd4c
commit 76157e3cb1
329 changed files with 8609 additions and 4549 deletions

View File

@@ -12,10 +12,23 @@ namespace SLSFramework.General
{
public readonly List<CommandBase> commands = new List<CommandBase>();
public readonly ExecutionMode mode;
/// <summary>
/// 包含了指令组执行过程中产生的所有上下文信息。不论是内部还是外部的上下文皆可获取。
/// </summary>
public readonly CommandContext groupContext;
public CommandGroup(ExecutionMode mode, params CommandBase[] commands)
{
this.mode = mode;
this.groupContext = new CommandContext();
this.commands.AddRange(commands);
}
public CommandGroup(ExecutionMode mode, CommandContext groupContext, params CommandBase[] commands)
{
this.mode = mode;
this.groupContext = groupContext;
this.commands.AddRange(commands);
}
@@ -42,7 +55,13 @@ namespace SLSFramework.General
// 而是创建一个“延迟执行”的 Observable 序列。
// Defer 会将对 Execute 的调用推迟到 Concat/WhenAll 真正订阅它的时候。
var lazyCommandObservables = commands.Select(cmd =>
Observable.Defer(() => cmd.Execute(outerContext))
Observable.Defer(() =>
{
IObservable<Unit> result = cmd.Execute(outerContext);
groupContext.Merge(outerContext);
groupContext.Merge(cmd.selfContext);
return result;
})
);
IObservable<Unit> executionFlow;
@@ -58,6 +77,7 @@ namespace SLSFramework.General
executionFlow = Observable.WhenAll(lazyCommandObservables).AsUnitObservable();
}
return executionFlow;
// 注意:基类中的 TakeUntil(forceCompleteSubject) 会自动应用到这里返回的流上,所以无需重复添加。
}