The SubscriptionManager publish worker calls m_acks.Reader.Count outside
its inner try block. On runtimes that fall back to the PrioritizedChannel
polyfill (net48), the base ChannelReader<T>.Count throws
NotSupportedException because PrioritizedReader did not override
CanCount/Count.
Result: every publish worker iteration crashed immediately at
GetAcksReadyToSend, the worker task completed, the controller
recreated the worker, and the cycle repeated as a tight loop.
This prevented any actual publish from happening and caused
integration tests that wait for subscription data to time out:
- SubscriptionRecoversAfterAutomaticReconnect
- SubscriptionRecoversAfterFailover
- TransferSubscriptionsKeepsV2SubscriptionWorkingAfterReconnect
- BuilderTransferSubscriptionsOnRecreateOptInAppliesToV2Manager
The framework's UnboundedPrioritizedChannel<T> reader (used on
.NET 9+) overrides Count to expose the underlying queue count;
the polyfill must do the same.
Added a regression test ReaderSupportsCount.
- Add new managed session, wrapping session and providing connection management and failover handling
- Add new Subscription engine that can act as alternative to current engine, but is based on channels with worker tasks
- Add a fluent builder for managed session clients
- Replace NodeCache with LruNodeCache, rename ILruNodeCache and LruNodeCache to INodeCache and NodeCache
- Update migration guide and document new functionality.