Resolves the registered submitter, or null when no durable-execution package is loaded.
Returning null rather than throwing is deliberate: a host with no dispatcher (a CLI, a test, a
browser bundle) is a legitimate configuration, and the caller can turn the absence into a
corrective the model can act on. What must never happen is a graph vanishing quietly.
The Submit check is not defensive noise. When nothing has registered under the key,
ClassFactory.CreateInstance does not return null — it falls back to instantiating the base
class it was given, and TaskGraphSubmitter is abstract only to TypeScript. The caller therefore
receives a real object whose Submit is undefined, sails past its own null check, and dies on
submitter.Submit is not a function — a stack trace about a missing method, when the actual fact
is "this host has no dispatcher". That is precisely the diagnosis the null return exists to give,
so the contract is enforced here rather than trusted.
Resolves the registered submitter, or
nullwhen no durable-execution package is loaded.Returning null rather than throwing is deliberate: a host with no dispatcher (a CLI, a test, a browser bundle) is a legitimate configuration, and the caller can turn the absence into a corrective the model can act on. What must never happen is a graph vanishing quietly.
The
Submitcheck is not defensive noise. When nothing has registered under the key,ClassFactory.CreateInstancedoes not return null — it falls back to instantiating the base class it was given, andTaskGraphSubmitteris abstract only to TypeScript. The caller therefore receives a real object whoseSubmitisundefined, sails past its own null check, and dies onsubmitter.Submit is not a function— a stack trace about a missing method, when the actual fact is "this host has no dispatcher". That is precisely the diagnosis the null return exists to give, so the contract is enforced here rather than trusted.