Когда я спрашиваю в отрицательной форме, ответ такой, я думаю, довольно ясен - нет никакой гарантии, что вторая половина будет выполнена в потоке, отличном от первой.Как вы предполагаете, исходная нить вполне может быть удачной следующей доступной нитью, когда продолжение готово к выполнению.
Также важно отметить, что это context , не обязательно поток , который восстанавливается.В случае цикла сообщений Windows (например, потока пользовательского интерфейса WinForms) именно поток пользовательского интерфейса, выполняющий цикл сообщений, принимает и выполняет продолжение, следовательно, при ConfigureAwait(true)
гарантируется тот же поток.Однако с другими объектами SynchronizationContexts не может быть особых причин требовать или даже предпочитать исходный поток, если все, что они считают «контекстом», восстанавливается;например, HttpContext.Current
[, идентичность, культура] в ASP.NET.
Существует также, по крайней мере, теоретический шанс, что HeavyIo()
завершится синхронно, в этом случае переключение контекста все равно не происходит, ивторая половина просто продолжится в той же теме, что и первая.Я могу только предположить из вашего выбора имен («тяжелый»), что вы намекаете, что это не вариант.