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).
Отклонённые альтернативы¶
- Оставлять маршалинг полностью размазанным по коду без согласованной точки — отклонено в пользу предсказуемости и ревью.