В своем answerStephen объяснил, что когда ConfigureAwait(false)
называется остальная часть метода будет выполняться на поток пула потоков разве что Task
вы await
ИНГ уже завершена.Поведение установки ConfigureAwait и SynchronisationContext
Что понятно: Если я использую ConfigureAwait(false)
все выполняется после асинхронного вызова будет выполняться на поток пул потоков и, следовательно, не выполняется в UI SynchronizationContext, в противном случае (escpecially необходимо для пользовательского интерфейса вещей, основанных как textBox1.Text = data.Property
) он работает в Синхронизация пользовательского интерфейса.
Что я не понимаю: Есть ли await
не означает, что Task
я жду это всегда завершена до методов происходит? Итак, как можно выполнить задачу перед тем, как продолжить?
спасибо, Dirk! Хорошо, хорошо, я понял! Всегда только представлял себе такие вещи, как «var result = await DoSomething(). ConfigureAwait (false);'. Но не означает ли это, что если вы вызываете что-то вроде моего примера, моя задача * всегда * завершена до выполнения остальной части метода и должна выполняться таким образом в контексте SynchronisationContext UI? – Batz
Да, но вы не должны полагаться на это. Если вы * хотите * использовать код выполнения после 'await' в том же контексте, что и вызов метода async, не используйте' .ConfigureAwait'. – Dirk
Я думаю, что было бы более целесообразно написать этот код следующим образом: 'var task = obj.SomeTaskAsync(); /* Сделайте несколько длинных вычислений */ var value = wait task.ConfigureAwait (false); 'Это потому, что' ConfigureAwait() 'имеет смысл только вместе с' await'. – svick