Ваше понимание SubscribeOnDispatcher неверно.Прежде всего, давайте различать два оператора * On:
- SubscribeOn * - Запускает (не) логику подписки в указанном планировщике.Используется редко, если только вы не играете с Observable.Create и т. Д.
- ObserveOn * - запускает сообщения наблюдателя (OnNext, OnError, OnCompleted) в указанном планировщике.Чаще всего используется для синхронизации пользовательского интерфейса при запуске «обработчиков событий», передаваемых в Subscribe.
Для того, чтобы ваш пример работал, вы также должны придерживаться оператора ObserveOn, который используется ниже в запросе.Мы рекомендуем сделать это прямо перед финальным звонком.Внутри запроса параллелизм может быть введен такими операторами, как Throttle (чей планировщик по умолчанию - пул потоков).Только в тот момент, когда вам нужны гарантии синхронизации, введите оператор * On.
Предложение Пола параметризировать вызов Throttle также является хорошим.В случаях, когда вы можете контролировать весь введенный параллелизм, вы можете захотеть это сделать.Тем не менее, во многих случаях вам передается последовательность IObservable, которая плохо себя ведет в отношении требований к синхронизации, что требует использования операторов * On.