SynchronizationContext | Контекст синхронизации
Версия 3.2 от Alexandr Fokin на 2023/01/11 15:18
Понятие контекста синхронизации.
Не все типы приложений и фреймворки содержит такой компонент как контекст синхронизации.
Его основная цель - реализация механизма определения того, в каком потоке будет продолжаться выполнение кода после выхода из асинхронного ожидания (await).
// (По умолчанию) ConfigureAwait(true)
| Сообщает, что необходимо задействовать механизм контекста синхронизации для кода, идущего после выхода из данной асинхронной операции. |
ConfigureAwait(false) | Сообщает, что код, идущего после выхода из данной асинхронной операции, может быть выполнен в любом потоке из пула потоков. |
Например во многих графических фремворках менять состояние контролов можно только из UI Thread, если после асинхронной операции нам необходимо изменить контрол, то нужна гарантия того, что код будет выполнен в UI Thead, а не любом Thread из ThreadPool. Потоки и задачи
DeadLock при async await.
В некоторых случаях при неправильном использовании возможны ситуации, которая приводит к взаимной блокировке потока и зависанию приложения.
Ссылки:
- ConfigureAwait FAQ
devblogs.microsoft| ConfigureAwait FAQ - ConfigureAwait, кто виноват и что делать?
https://habr.com/ru/company/clrium/blog/463587/ - ConfigureAwait: часто задаваемые вопросы
https://habr.com/ru/post/482354/ - SynchronizationContext — когда MSDN подводит
https://habr.com/ru/post/232169/ - IT - записки программиста: Контексты исполнения (ExecutionContext) и синхронизации (SynchronizationContext) - что это такое и с чем их едят ?
http://alz-it.blogspot.com/2016/06/executioncontext-synchronizationcontext.html - Пишем свой SynchronizationContext
https://itnan.ru/post.php?c=1&p=269985