@returnZero

Как связанны TaskScheduler и SynchronizationContext в C#?

У меня есть некоторое непонимание относительно связи этих механизмов. Как я понимаю TaskScheduler - это механизм для планировки выполнения задач, по умолчанию используется планировщик пула потоков. Но так-же есть планировщик текущего контекста синхронизации. Контекст синхронизации - это механизм который выполняет наш код в определенном месте, как я понимаю он есть только в приложениях в пользовательским интерфейсом(по умолчанию). Напрашивается вопрос - у контекста синхронизации есть свой собственный планировщик? Я могу получить к нему доступ? Как эти два понятия работают между собой?

P.S - видел похожий вопрос на англоязычной версии сайта - https://stackoverflow.com/questions/9580061/what-i.... Но из него я так и не смог получить ответ на свой вопрос.
  • Вопрос задан
  • 85 просмотров
Решения вопроса 1
DarkRaven
@DarkRaven
разработка программного обеспечения
TaskScheduler - это низкоуровневая абстракция, предназначенная для постановки задачи в очередь исполнения на потоках.

SynchronizationContext - это специальная абстракция, которая предназначена для того, чтобы определить, как будет исполняться задача, и, что более важно, определить, как будет происходить коммуникация между потоками, в рамках исполнения данной задачи.

Говоря простым языком, когда нужно (имеет смысл для десктопных приложений, у которых есть основной поток, исполняющий UI, графический интерфейс), synchronization context запомнит ваше окружение - поток, точку вызова, выполнит асинхронную операцию на другом потоке и продолжит исполнение результатов в заполненном потоке.

Для каждого контекста может быть определен планировщик задач, который и будет выполнять задачи, а контекст будет управлять их исполнением ("переключать" между потоками, грубо говоря - если это требуется).

Не для всех фреймворков нужно такое поведение, для веб нет контекста синхронизации и нам в конечном итоге без разницы, на каких потоках будет исполнен наш код.

Но, для winforms / wpf это очень важный механизм, так как любое взаимодействие с интерфейсом возможно только из потока UI.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы