New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merge with Dynamic Maximum Concurrency #48
Comments
Some more details: |
What should the operator do when a smaller maxConcurrent value is signalled after a larger one? Stop consuming the excess active ones or let them finish and don't subscribe to new ones until the active source count goes below the current limit? |
Here's the comment from the dynamic
|
This requires deep changes and possibly done for a lot of |
Copied from https://rx.codeplex.com/workitem/43
Rx defines an overload of the Merge operator with a maxConcurrent parameter that is useful for controlling the level of concurrency through the number of active subscriptions to inner observables; however, the maxConcurrent parameter is static and in some cases it's impossible to write a query that changes the parameter dynamically. Unsubscribing and re-subscribing to Merge won't work for a hot source due to the fact that Merge uses an internal buffer. Unsubscribing will lose all of the inner observables that have already been buffered but aren't yet active, and since the source is hot, this causes permanent data loss.
Consider adding a Merge overload such as the one shown in the following discussion:
http://social.msdn.microsoft.com/Forums/en-US/62743ffd-befd-474a-8f0a-19dbaec7a926/design-question-throttling-hits-on-external-systems
It has the following signature:
IObservable<TSource> Merge<TSource>(this IObservable<IObservable<TSource>> source, IObservable<int> maxConcurrent)
The text was updated successfully, but these errors were encountered: