Class InMemoryFlowSignalStore
- Namespace
- FlowOrchestrator.InMemory
- Assembly
- FlowOrchestrator.InMemory.dll
In-process IFlowSignalStore backed by a ConcurrentDictionary<TKey, TValue>. Used by tests and by the in-memory runtime; data does not survive process restart.
public sealed class InMemoryFlowSignalStore : IFlowSignalStore
- Inheritance
-
InMemoryFlowSignalStore
- Implements
- Inherited Members
Methods
DeliverSignalAsync(Guid, string, string, CancellationToken)
Atomically attempts to deliver a payload to the waiter matching (runId, signalName).
public ValueTask<SignalDeliveryResult> DeliverSignalAsync(Guid runId, string signalName, string payloadJson, CancellationToken ct = default)
Parameters
runIdGuidThe run whose waiter should receive the payload.
signalNamestringSignal name to look up.
payloadJsonstringPre-serialised JSON payload supplied by the caller.
ctCancellationTokenCancellation token.
Returns
- ValueTask<SignalDeliveryResult>
Delivered with the resolved
StepKeyon success; NotFound when no waiter matches; AlreadyDelivered when a payload is already recorded.
Remarks
Delivers to the oldest UNDELIVERED waiter for the run + signal name, mirroring the
AND delivered_at IS NULL CTE filter in the SQL backends. When several waiters
share the same run + signal name (different step keys), a sequence of deliveries fans
out to each undelivered waiter in CreatedAt order rather
than repeatedly re-selecting the first — already-delivered — waiter.
GetWaiterAsync(Guid, string, CancellationToken)
Returns the waiter for the given run + step key, or null if none is registered.
public ValueTask<FlowSignalWaiter?> GetWaiterAsync(Guid runId, string stepKey, CancellationToken ct = default)
Parameters
runIdGuidstepKeystringctCancellationToken
Returns
RegisterWaiterAsync(Guid, string, string, DateTimeOffset?, CancellationToken)
Registers a new waiter for runId + stepKey. Idempotent —
a duplicate register on the same key updates the signal name / expiry without resetting CreatedAt.
public ValueTask RegisterWaiterAsync(Guid runId, string stepKey, string signalName, DateTimeOffset? expiresAt, CancellationToken ct = default)
Parameters
runIdGuidThe run that owns the parked step.
stepKeystringThe step key as authored in the flow manifest.
signalNamestringLogical signal name to address the waiter from the signal endpoint.
expiresAtDateTimeOffset?Optional absolute deadline; null waits indefinitely.
ctCancellationTokenCancellation token.
Returns
RemoveWaiterAsync(Guid, string, CancellationToken)
Removes the waiter row. Called by the handler when the wait is over (delivered, expired, or cancelled).
public ValueTask RemoveWaiterAsync(Guid runId, string stepKey, CancellationToken ct = default)
Parameters
runIdGuidstepKeystringctCancellationToken