Вы ожидаете (термин используется свободно) задачи.
Было бы больше смысла, если бы вы не использовали .GetAwaiter().GetResult();
(которые в любом случае являются внутренними методами фреймворка) и просто написали
SomeAsyncCode().Wait();
Console.WriteLine("Run First");
Тогда становится очевидным, что происходит, вы ждетедля выполнения задачи.
Следующее, вероятно, больше похоже на то, что вы ожидаете;
// start task
var task = SomeAsyncCode();
Console.WriteLine("Run First");
task.Wait();
Хотя, честно говоря, редко нужно звонить, Wait
, Result
или GetAwaiter().GetResult()
в методе async
, при этом в приложении UI или в чем-либо с контекстом синхронизации , скорее всего, возникнет тупик
В идеалевы позволяете async
и await
распространяться, в C # 7.1 и выше у вас есть возможность создать async
Entry Point , которая позволяет вам использовать Async иОжидать шаблон более кратким образом
static async Task Main(string[] args)
{
await SomeAsyncCode();
Console.WriteLine("Run First");
}
или
static async Task Main(string[] args)
{
var task = SomeAsyncCode();
Console.WriteLine("Run First");
await Task.WhenAll(task);
}