ConfigureAwait
- это локальное решение для каждого написанного вами метода.ConfigureAwait(true)
- это способ указать, что вы хотите попытаться вернуться к тому же контексту , в котором ваш метод работал при первом вводе .
Во-первых, это означает, что если вы не знаете, в каком контексте вы изначально работали в , тогда нет смысла пытаться вернуться в тот же контекст.Вы не должны пытаться делать что-либо, зависящее от контекста, если вас могут вызывать в разных контекстах.Вот почему обычно рекомендуется использовать ConfigureAwait(false)
, если вы создаете библиотеку.Вы не будете знать контексты, в которых вызывается ваш код.
И, во-вторых, это означает, что нет «глобального» контекста, к которому можно вернуться.Если ваш вызывающий абонент (или любой из его вызывающих абонентов и т. Д. Выше по цепочке) уже отделился от их исходного контекста вызова, нет способа (через этот механизм) вернуться кэтот контекст.
Если вы хотите переключиться на специфический контекст (такой как поток пользовательского интерфейса), и это не обязательно будет вашим вызывающим контекстом, вам нужно использовать другой, контекстныйконкретный механизм, такой как Dispatcher.Invoke()
или любой другой подходящий в вашей среде.