2

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

P.S - видел похожий вопрос на англоязычной версии сайта - https://stackoverflow.com/questions/9580061/what-is-the-conceptual-difference-between-synchronizationcontext-and-taskschedul. Но из него я так и не смог получить ответ на свой вопрос.

  • Контекст синхронизации это и есть планировщик сам по себе. Только его задача - работа с async/await, с асинхронным контекстом ExecutionContext. А на базе TaskScheduler работают методы TPL типа Parallel или ContinueWith. Чтобы получить доступ к текущему контексту синхронизации, обратитесь к SynchronizationContext.Current, и вызовите ему Send или Post. Вот и вся магия. Пример реализации собственного контекста: https://ru.stackoverflow.com/a/1385260/373567, почитать по теме можно здесь: https://devblogs.microsoft.com/dotnet/how-async-await-really-works/ – aepot Aug 04 '23 at 19:54
  • TaskSheduler планирует выполнение задач в потоках, а SynchronizationContext отвечает за планирование выполнения работы в задаче – Nikolay Aug 05 '23 at 12:07
  • @Nikolay есть задача Task (ожидание, асинхронность) и поток Thread (выполнение, многопоточность), а у вас откуда-то три сущности появилось. – aepot Aug 06 '23 at 10:45
  • @aepot кто то же должен управлять выполнением statemachine асинхронного метода. Например то в каком потоке будет продолжено выполнение кода метода после await – Nikolay Aug 06 '23 at 13:31

0 Answers0