Перейти к содержанию

ADR 0004: Маршалинг обновлений UI через IUiScheduler

Статус: Accepted (план внедрения — strangler)
Дата: 2026-04-02 (ретроспектива)

Связанные ADR

ADR Роль
0007 Сигналы, слабая связность и снятие нагрузки с UI

Вне ADR

Документ Роль
architecture-migration.md architecture migration
architecture-policy.md architecture policy

Контекст

В IDE много асинхронных источников (сборка, MCP, LSP и т.д.). Размазанный Post/Invoke по коду усложняет сопровождение и повышает риск обращения к UI не с UI-потока.

Решение

Обновления ViewModel и UI после работы в фоне по возможности проходят через одну согласованную точку маршалинга: IUiScheduler и UiScheduler.Default (реализация на Dispatcher.UIThread), а не произвольные вызовы диспетчера по всему коду.

Точечные очереди и батчинг для перегруженных потоков данных — отдельно, где нужно (см. ADR 0007).

Последствия

  • Новый код следует этому правилу; существующий мигрируется постепенно.
  • Порядок внедрения в коде — в architecture-migration.md (фаза 5).

Отклонённые альтернативы

  • Оставлять маршалинг полностью размазанным по коду без согласованной точки — отклонено в пользу предсказуемости и ревью.