// Copyright (c) 2025-2026 GeWuYou // SPDX-License-Identifier: Apache-2.0 using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Threading; using GFramework.Cqrs.Abstractions.Cqrs; using GFramework.Cqrs.Cqrs; namespace GFramework.Cqrs.Tests.Cqrs; /// /// 记录缓存 stream pipeline executor 复用场景下每次建流注入到 behavior 的上下文与实例身份。 /// internal sealed class DispatcherStreamPipelineContextRefreshBehavior : CqrsContextAwareHandlerBase, IStreamPipelineBehavior { private readonly int _instanceId = DispatcherStreamContextRefreshState.AllocateBehaviorInstanceId(); /// /// 记录当前 behavior 实例实际收到的上下文,然后继续执行下游处理阶段。 /// /// 当前流式请求。 /// 下一个处理阶段。 /// 取消令牌。 /// 下游处理阶段返回的异步流。 public async IAsyncEnumerable Handle( DispatcherStreamContextRefreshRequest request, StreamMessageHandlerDelegate next, [EnumeratorCancellation] CancellationToken cancellationToken) { DispatcherStreamContextRefreshState.RecordBehavior(request.DispatchId, _instanceId, Context); await foreach (var item in next(request, cancellationToken) .WithCancellation(cancellationToken) .ConfigureAwait(false)) { yield return item; } } }