Возможно ли, что tWithCapturedCtx будет выполняться так быстро, что продолжение будет выполнено в захваченном контексте?
Сорт.
Если tWithCapturedCtx
уже завершено к моменту оценки await
(что означает, что tWithoutCapturedCtx
также уже завершен), то продолжения не существует. Метод async
продолжает выполнять синхронно (в том же контексте).
Однако, если tWithCapturedCtx
еще не закончена к тому времени, await
оценивается (что означает tWithoutCapturedCtx
также уже не закончил), то продолжение планируется без контекста захвата.
Существует еще одно, еще меньшее условие гонки между тем, когда await
проверяет, завершено ли его выполнение, и когда await
планирует продолжение. Если ожидаемое завершение в этом окне, то продолжение выполняется только синхронно (опять же, в том же контексте).
В заключение, ConfigureAwait(false)
означает «Мне все равно, в каком контексте работает весь этот метод»; это не означает «запустить оставшуюся часть этого метода в пуле потоков». Если вы хотите сказать «запустите этот другой код в потоке пула потоков», используйте Task.Run
.
Ваше изменение полностью изменило вопрос и, вероятно, аннулировал существующие/принятые ответы. Пожалуйста, избегайте таких изменений - не стесняйтесь задавать новый вопрос, если вы считаете, что не правильно выразили свою проблему. Подумайте о возврате изменений. –
@ user3284063: Я откат вашего редактирования, так как он задает другой вопрос. Пожалуйста, не стесняйтесь публиковать новый вопрос. –