Обрабатывать множество небольших задач и поддерживать отзывчивость интерфейса
У меня есть приложение WPF, которое должно выполнить некоторые небольшие задачи. Все эти небольшие задачи создаются одновременно и добавляются в очередь диспетчера с приоритетом Normal. Одновременно отображается индикатор занятости. В результате индикатор занятости фактически зависает, несмотря на то, что работа разбита на задачи.
Я попытался изменить приоритет этих задач на Фоновый, чтобы увидеть, исправил ли он это, но индикатор занятости все еще завис.
Я подписался наDispatcher.Hooks.OperationStarted
событие, чтобы увидеть, если какие-либо задания рендеринга произошли во время обработки моих задач, но они этого не сделали.
Есть идеи, что происходит?
Некоторые технические детали: задачи на самом деле просто сообщения, поступающие отObservable
последовательности, и они «помещаются в очередь» в диспетчере при вызове ReactiveUIObserveOn(RxApp.MainThreadScheduler)
который должен быть эквивалентенObserveOn(DispatcherScheduler)
, Рабочей частью каждой из этих задач является код, который подписывается через вызов ObserveOn, например,
IObservable<TaskMessage> incomingTasks;
incomingTasks.ObserveOn(RxApp.MainThreadScheduler).Subscribe(SomeMethodWhichDoesWork);
в этом примере входящие задачи будут генерировать, возможно, более 3000 сообщений подряд, ObserveOn помещает каждый вызов SomeMethodWhichDoesWork в очередь диспетчера, чтобы он был обработан позже.