"Await Task.CompletedTask" что-нибудь делает? - PullRequest
0 голосов
/ 22 января 2020

Мне любопытно, что это утверждение:

await Task.CompletedTask;

Я знаю, что это номинально не делает ничего практичного, но мне интересно, действительно ли оно заставляет запущенную функцию завершать работу, а затем возобновлять выполнение оператора после ожидания, или же она действительно ничего не делает и вообще не прерывает поток.

Это может иметь значение в том смысле, что это вызовет текущий прогон l oop для завершения и возобновления, и если прогон l oop является основным потоком, это будет означать, что изменения пользовательского интерфейса были зафиксированы.

Документация не объясняет этого, и я могу Не могу найти хороший способ решить, что это такое.

Спасибо, Фрэнк

1 Ответ

1 голос
/ 23 января 2020

вызывает ли это фактическое завершение работающей функции, затем возобновить выполнение оператора после ожидания, или оно действительно ничего не делает и вообще не прерывает поток.

await сначала проверит его ожидание, чтобы увидеть, завершено ли оно, и если это так, оно продолжит синхронно .

Если вы хотите force чтобы получить асинхронную функцию, используйте await Task.Yield();. Примечание: это должно быть крайне редко в рабочем коде, но иногда полезно для модульных тестов.

...