// Copyright (c) 2025-2026 GeWuYou // SPDX-License-Identifier: Apache-2.0 using System.Threading; using GFramework.Cqrs.Abstractions.Cqrs; namespace GFramework.Core.Tests.Architectures; /// /// 记录流式请求通过管道次数的测试行为。 /// /// 流式请求类型。 /// 流式响应元素类型。 public sealed class TrackingStreamPipelineBehavior : IStreamPipelineBehavior where TRequest : IStreamRequest { private static int _invocationCount; /// /// 获取当前测试进程中该流式请求类型对应的行为触发次数。 /// 该计数器是按泛型闭包共享的静态状态,测试需要在每次运行前显式重置。 /// public static int InvocationCount { get => Volatile.Read(ref _invocationCount); set => Volatile.Write(ref _invocationCount, value); } /// /// 以线程安全方式记录一次行为执行,然后继续执行下一个处理阶段。 /// /// 当前流式请求消息。 /// 下一个处理阶段。 /// 取消令牌。 /// 下游处理阶段返回的异步流。 public IAsyncEnumerable Handle( TRequest message, StreamMessageHandlerDelegate next, CancellationToken cancellationToken) { Interlocked.Increment(ref _invocationCount); return next(message, cancellationToken); } }