[[Использовать SynchronizationContext, вместо EditorApplication.delayCall для работы в главном потоке из thread-pool-потоков]]
### Что это вообще за «контекст синхронизации»?
|Термин|Что означает|
|---|---|
|**`SynchronizationContext`** (контекст синхронизации)|Абстракция .NET, описывающая **правило, на каком потоке должны выполняться «продолжения»** асинхронных операций.|
|**`Post`**|Асинхронно кладёт делегат в очередь указанного контекста. Не блокирует вызывающий поток.|
|**`Send`**|Выполняет делегат синхронно на целевом контексте (может заблокировать).|
#### Как Unity использует контекст
- При запуске Editor Unity создаёт собственный `SynchronizationContext` и **привязывает его к главному потоку**.
- Любой `await` внутри Editor-скрипта, который выполняется на главном потоке, «запоминает» этот контекст. Поэтому после `await` код продолжает исполняться опять же на главном потоке — именно так работают асинхронные Editor-скрипты.
### Коротко
- **`SynchronizationContext`** — это «адрес» главного потока; `Post` — «письмо» в этот адрес.
- Захватили контекст при старте → пересылаем в него любую Unity-чувствительную работу, даже если исходный вызов пришёл с другого потока.
- Надёжно устраняет ошибки вида _«…can only be called from the main thread»_ и не зависит от фокуса Editor.