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 Chain calls after a successful ShortCircuit still execute. The short-circuit value only affects Resolve(): it returns the captured value instead of doing a Memory lookup. If you need to skip remaining junctions entirely, combine ShortCircuit with 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

  1. Creates the junction instance and extracts input from Memory.
  2. Executes the junction.
  3. 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.
  4. 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 for Resolve().
  • This is useful for cache checks, optional enrichment junctions, and conditional early returns.

Back to top

Trax - A .NET framework for Railway Oriented Programming with Effects, Scheduling, and more