Я все еще изучаю всю концепцию Task и TPL. Из моего текущего понимания функции SynchronizationContext (если они есть) используются await
для отправки задачи "где-то". С другой стороны, функции класса Task
не используют контекст, правильно?
Итак, например Task.Run(...)
всегда будет отправлять действие в рабочий поток пула потоков и полностью игнорировать SynchronizationContext.Current
. await Foobar()
будет использовать контекст для выполнения сгенерированной задачи после await
?
Если это так, то мой вопрос: как я могу получить Task
, который фактически запускает действие, но отправляется с помощью SynchronizationContext.Current.Send/Post
?
И может ли кто-нибудь рекомендовать хорошее введение в SynchronizationContext
, особенно когда и как они используются остальной частью фреймворка? MSDN кажется очень спокойным относительно класса. Верхние хиты Google (здесь и здесь) кажутся с учетом только диспетчеризации Windows Forms. Стивен Клири написал статью статью, в которой приятно узнать, какие контексты уже существуют и как они работают, но мне не хватает понимания того, где и когда они фактически используются.