Found in the pre-4.0 audit (follow-up to #360/#361). DX, not a blocker.
IAsyncEnumerableProcessor implementations are documented single-use and dispose their internal linked CancellationTokenSource when ExecuteAsync completes. A second ExecuteAsync call then hits the disposed CTS and surfaces a bare ObjectDisposedException (naming CancellationTokenSource), with no hint the processor is single-use. Result-streaming variants defer the failure to the first MoveNextAsync, making it even harder to trace.
Fix: guard ExecuteAsync entry: second call throws InvalidOperationException stating the processor is single-use; a call after explicit disposal throws ObjectDisposedException naming the processor type. No signature changes.
Found in the pre-4.0 audit (follow-up to #360/#361). DX, not a blocker.
IAsyncEnumerableProcessorimplementations are documented single-use and dispose their internal linkedCancellationTokenSourcewhenExecuteAsynccompletes. A secondExecuteAsynccall then hits the disposed CTS and surfaces a bareObjectDisposedException(namingCancellationTokenSource), with no hint the processor is single-use. Result-streaming variants defer the failure to the firstMoveNextAsync, making it even harder to trace.Fix: guard
ExecuteAsyncentry: second call throwsInvalidOperationExceptionstating the processor is single-use; a call after explicit disposal throwsObjectDisposedExceptionnaming the processor type. No signature changes.