You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Supersedes the Runtime portion of #265 (split after stream API lock). Sibling slices: SourceGenerators #265; Docs (filed with this split).
What to build
Ship Command Router stream send runtime primitives: progressive IAsyncEnumerable results on the same router domain, without a separate Stream Request Router. Non-stream SendAsync / TrySendAsync paths remain unchanged.
Locked decisions
Handler: IStreamCommandHandler<in TCommand, out TItem> with IAsyncEnumerable<TItem> HandleAsync(TCommand, CancellationToken)
Parent
#256
Related
Supersedes the Runtime portion of #265 (split after stream API lock). Sibling slices: SourceGenerators #265; Docs (filed with this split).
What to build
Ship Command Router stream send runtime primitives: progressive
IAsyncEnumerableresults on the same router domain, without a separate Stream Request Router. Non-streamSendAsync/TrySendAsyncpaths remain unchanged.Locked decisions
IStreamCommandHandler<in TCommand, out TItem>withIAsyncEnumerable<TItem> HandleAsync(TCommand, CancellationToken)SendStreamAsync<TCommand, TItem>+TrySendStreamAsync<TCommand, TItem>onICommandRouter(Try* returnsCommandSendAttempt<IAsyncEnumerable<TItem>>)TCommandcannot register both non-stream and stream handler (shared 1:1 bijection map)CommandRouterBuilder.Register<TCommand, TItem>(IStreamCommandHandler<TCommand, TItem>)Microsoft.Bcl.AsyncInterfacessoIAsyncEnumerableis public on both TFMsAcceptance criteria
IStreamCommandHandler<TCommand, TItem>+SendStreamAsync/TrySendStreamAsynconICommandRouterCommandRouterBuildercan register stream handlers; duplicate command type (vs void/result/stream) throwsSendStreamAsyncthrowsCommandHandlerNotFoundException;TrySendStreamAsyncreturnsFailedInvalidOperationExceptionBlocked by
None — can start immediately.