Async CTP - Рекомендуемый подход для планирования задач

В настоящее время я работаю над в основном асинхронным приложением, которое повсюду использует TAP. Каждый класс, у которого есть методы для порождения Task s, также имеет внедренный в него TaskScheduler . Это позволяет нам выполнять явное планирование задач, что, как я понимаю, не то, что Microsoft делает с Async CTP.

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

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

Вопрос 1: Может ли кто-нибудь меня убедить, что неявный подход - хорошая идея? Я вижу так много проблем, возникающих из-за ConfigureAwait (false) и явного планирования в устаревшем / стороннем коде. Как я могу быть уверен, что мой «ожидающий» код всегда выполняется в потоке пользовательского интерфейса, например?

Вопрос 2: Итак, предполагая, что мы удалим все TaskScheduler DI из нашего кода и начать использовать неявное планирование, как тогда установить планировщик задач по умолчанию? А как насчет изменения планировщика на полпути к методу, непосредственно перед ожиданием дорогостоящего метода, а затем снова его вернуть обратно?

(ps Я уже читал http://msmvps.com/blogs/jon_skeet/archive/ 02/11/02 / configuring-wait.aspx )

11
задан Lawrence Wagerfield 6 January 2012 в 15:44
поделиться