Forge
markdowndeeb25a2
1# ADR 0004: Маршалинг обновлений UI через IUiScheduler
2
3**Статус:** Accepted (план внедрения — strangler)
4**Дата:** 2026-04-02 (ретроспектива)
5## Связанные ADR
6
7| ADR | Роль |
8|-----|------|
9| [0007](0007-signals-coupling-and-ui-backpressure.md) | Сигналы, слабая связность и снятие нагрузки с UI |
10
11### Вне ADR
12
13| Документ | Роль |
14|----------|------|
15| [architecture-migration.md](../architecture-migration.md) | architecture migration |
16| [architecture-policy.md](../architecture-policy.md) | architecture policy |
17
18---
19## Контекст
20
21В IDE много асинхронных источников (сборка, MCP, LSP и т.д.). Размазанный `Post`/`Invoke` по коду усложняет сопровождение и повышает риск обращения к UI не с UI-потока.
22
23## Решение
24
25Обновления ViewModel и UI после работы в фоне по возможности проходят через **одну согласованную точку** маршалинга: **`IUiScheduler`** и **`UiScheduler.Default`** (реализация на `Dispatcher.UIThread`), а не произвольные вызовы диспетчера по всему коду.
26
27Точечные очереди и батчинг для перегруженных потоков данных — отдельно, где нужно (см. [ADR 0007](0007-signals-coupling-and-ui-backpressure.md)).
28
29## Последствия
30
31- Новый код следует этому правилу; существующий мигрируется постепенно.
32- Порядок внедрения в коде — в [architecture-migration.md](../architecture-migration.md) (фаза 5).
33
34## Отклонённые альтернативы
35
36- Оставлять маршалинг полностью размазанным по коду без согласованной точки — отклонено в пользу предсказуемости и ревью.
37
View only · write via MCP/CIDE