66867ca8f6
The probe and re-probe worker delegates closed over the CTS and read cts.Token when they ran. Task.Run's scheduling token only suppresses a still-queued task; a worker the pool had committed to but not yet invoked could outlive the bounded join in StopBackgroundLoopsAsync, after which the CTS was disposed and the delayed cts.Token read threw ObjectDisposedException (faulting the loop task). Snapshot the token value before Task.Run and close over it; a token value stays valid after its source is disposed and still reports cancellation, so a late worker exits cleanly on its own generation's cancelled token. Document the bounded-join / transport-lifetime limits on StopBackgroundLoopsAsync. Regression tests park the worker deterministically in TPL's synchronous TaskStarted event (after the start check, before the delegate runs) via an EventListener correlated to the one TaskScheduled on the test's armed flow: shutdown (probe + reprobe) and replacement-generation identity. All three fail with ObjectDisposedException without the fix.