ShortCircuit
Executes a junction that can return early from the train. If the junction succeeds and returns a value of type TReturn, that value is captured as the short-circuit result. When Resolve is called, it returns this value instead of looking in Memory.
If the junction fails (returns Left), the failure is ignored. No exception is set and the train continues normally.
Important: Subsequent
Chaincalls after a successfulShortCircuitstill execute. The short-circuit value only affectsResolve(): it returns the captured value instead of doing a Memory lookup. If you need to skip remaining junctions entirely, combineShortCircuitwith a conditional pattern or use the railway error path.
ShortCircuit<TJunction>()
Creates and executes a junction with short-circuit behavior.
public Monad<TInput, TReturn> ShortCircuit<TJunction>() where TJunction : class
| Type Parameter | Constraint | Description |
|---|---|---|
TJunction | class | The junction type. Must implement IJunction<TIn, TOut> for some TIn/TOut. |
ShortCircuit<TJunction>(TJunction junctionInstance)
Executes a pre-created junction with short-circuit behavior.
public Monad<TInput, TReturn> ShortCircuit<TJunction>(TJunction junctionInstance) where TJunction : class
| Parameter | Type | Description |
|---|---|---|
junctionInstance | TJunction | A pre-created junction instance |
Example
protected override OrderResult Junctions() =>
ShortCircuit<CheckCache>() // If cache has result, capture it for resolution
.Chain<ValidateOrder>() // Still executes even on cache hit
.Chain<ProcessPayment>(); // Returns cached result OR processed result
Behavior
- Creates the junction instance and extracts input from Memory.
- Executes the junction.
- If the junction succeeds and returns a value of type
TReturn:- The value is stored as
ShortCircuitValue. Resolve()will return this value, bypassing Memory lookup.
- The value is stored as
- If the junction fails (returns Left): the failure is ignored. No exception is set and the train continues normally.
Remarks
- The key difference from
Chain: failures do not stop the train. A failing short-circuit junction is silently ignored. - If the junction output type matches the train’s
TReturn, the value becomes the short-circuit result forResolve(). - This is useful for cache checks, optional enrichment junctions, and conditional early returns.