Здравствуйте, Serginio1, Вы писали:
S>Ну как здесь пишут https://habr.com/ru/post/260217/ возвращает он интерфейс IAsyncStateMachine с двумя методами
S>https://docs.microsoft.com/ru-ru/dotnet/api/system.runtime.compilerservices.iasyncstatemachine?view=net-5.0
Это вообще не о том. Эта статья о том как режется метод на части с продолжениями. Но никто не гарантирует, что вызов с async прямо перемещается на другой поток.
Вот этот Task.Delay(1000) из статьи, например, создает внутри себя System.Threading.Timer с интервалом 1000 миллисекунд и задает ему делегат, который вызывает Task.Complete(). Вот от этого таймера и появляется асинхронность, так как события таймера вызываются на потоках из пула. А если бы Task.Delay() тупо закомплитил задачу прямо в своем теле, то никаких потоков не создалось бы.