Решите, когда использовать ConfigureAwait (false)

Если операторы в графе вызовов после точки ожидания не обращаются к какому-либо объекту, тип которого не является производным от класса System.Windows.UIElement, можем ли мы сказать, что разработчик безопасно использует ConfigureAwait (false) для приложений Windows Mobile?

Какие операторы должны выполняться в потоке пользовательского интерфейса, помимо обновления элементов графического интерфейса?


person Tom K.    schedule 07.09.2013    source источник


Ответы (1)


Любой код, который прямо (или косвенно) манипулирует элементами пользовательского интерфейса, должен запускаться в контексте пользовательского интерфейса. Обычно это просто прямое изменение и обновление ViewModels.

Во всех остальных случаях следует использовать ConfigureAwait(false).

person Stephen Cleary    schedule 07.09.2013
comment
Чтобы процитировать себя: хорошее практическое правило - использовать ConfigureAwait(false), если вы не знаете, что нужен контекст. - person ta.speot.is; 07.09.2013
comment
Я хочу реализовать статический анализ, чтобы выявить случаи, когда мне не нужен контекст. Было бы безопасно, если бы я реализовал способ, описанный выше? - person Tom K.; 07.09.2013
comment
@TomK .: Если вы реализуете свой статический анализ для включения любого кода, который вызывает событие, когда любая подписка на это событие может обновлять элемент пользовательского интерфейса, этого должно быть достаточно. - person Stephen Cleary; 07.09.2013
comment
Какие преимущества дает ConfigureAwait (false), когда его можно использовать? - person Owen Johnson; 24.01.2018
comment
@OwenJohnson: Эффективность. В частности, ваш код не прерывает поток пользовательского интерфейса, если в этом нет необходимости. - person Stephen Cleary; 24.01.2018