Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7564,22 +7564,24 @@ public RecordingChatStore(IState<ChatState> state, IWorkspaceWriter? workspaceWr

public async ValueTask Dispatch(ChatAction action)
{
// 临界区不捕获环境上下文:与真实 ChatStore.Dispatch 的契约一致,
// 闸的释放绝不依赖外部泵(fire-and-forget 分发也必须能自完成)。
_actions.Enqueue(action);
await _dispatchGate.WaitAsync();
await _dispatchGate.WaitAsync().ConfigureAwait(false);
try
{
var currentState = LatestState;
var updatedState = ChatReducer.Reduce(currentState, action);
LatestState = updatedState;
await State.Update(_ => updatedState, CancellationToken.None);
await State.Update(_ => updatedState, CancellationToken.None).ConfigureAwait(false);
if (updatedState.Generation > currentState.Generation)
{
_workspaceWriter?.Enqueue(updatedState, scheduleSave: true);
}

if (AfterDispatch is { } afterDispatch)
{
await afterDispatch(action);
await afterDispatch(action).ConfigureAwait(false);
}
}
finally
Expand All @@ -7591,7 +7593,7 @@ public async ValueTask Dispatch(ChatAction action)
public async ValueTask SetStateAsync(ChatState state)
{
LatestState = state;
await State.Update(_ => state, CancellationToken.None);
await State.Update(_ => state, CancellationToken.None).ConfigureAwait(false);
}

public ValueTask<ChatState> GetCurrentStateAsync()
Expand Down
Loading