Обрабатывать множество небольших задач и поддерживать отзывчивость интерфейса

У меня есть приложение WPF, которое должно выполнить некоторые небольшие задачи. Все эти небольшие задачи создаются одновременно и добавляются в очередь диспетчера с приоритетом Normal. Одновременно отображается индикатор занятости. В результате индикатор занятости фактически зависает, несмотря на то, что работа разбита на задачи.

Я попытался изменить приоритет этих задач на Фоновый, чтобы увидеть, исправил ли он это, но индикатор занятости все еще завис.

Я подписался наDispatcher.Hooks.OperationStarted событие, чтобы увидеть, если какие-либо задания рендеринга произошли во время обработки моих задач, но они этого не сделали.

Есть идеи, что происходит?

Некоторые технические детали: задачи на самом деле просто сообщения, поступающие отObservable последовательности, и они «помещаются в очередь» в диспетчере при вызове ReactiveUIObserveOn(RxApp.MainThreadScheduler) который должен быть эквивалентенObserveOn(DispatcherScheduler), Рабочей частью каждой из этих задач является код, который подписывается через вызов ObserveOn, например,

IObservable<TaskMessage> incomingTasks;
incomingTasks.ObserveOn(RxApp.MainThreadScheduler).Subscribe(SomeMethodWhichDoesWork);

в этом примере входящие задачи будут генерировать, возможно, более 3000 сообщений подряд, ObserveOn помещает каждый вызов SomeMethodWhichDoesWork в очередь диспетчера, чтобы он был обработан позже.

Ответы на вопрос(3)

Ваш ответ на вопрос