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. Nothing in a chain skips the remaining junctions and still returns the short-circuit value. Junctions() cannot branch on its input, because a chain is declared once and checked at startup (Trax.Docs/adr/0016), and a later junction that fails puts the train on the left track, where Resolve() returns that failure rather than the captured value. A junction after a ShortCircuit that should not repeat work has to decide that itself, from what it is given.

ShortCircuit<TJunction>()

Creates and executes a junction with short-circuit behavior.

protected MonadTask<TInput, TReturn> ShortCircuit<TJunction>() where TJunction : class
Type ParameterConstraintDescription
TJunctionclassThe junction type. Must implement IJunction<TIn, TOut> for some TIn/TOut.

ShortCircuit<TJunction>(TJunction junctionInstance)

Executes a pre-created junction with short-circuit behavior.

protected MonadTask<TInput, TReturn> ShortCircuit<TJunction>(TJunction junctionInstance) where TJunction : class
ParameterTypeDescription
junctionInstanceTJunctionA pre-created junction instance

Example

protected override Task<Either<Exception, OrderResult>> Junctions() =>
        ShortCircuit<CheckCache>()            // If cache has result, capture it for resolution
        .Chain<ValidateOrder>()           // Still executes even on cache hit
        .Chain<ProcessPayment>().Resolve();          // 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.