Однако, с ASP.NET Web Api, если ваш запрос поступает на один поток, и вы ждете некоторую функцию и вызываете
ConfigureAwait(false)
которые могут потенциально поставить вас на другой поток, когда вы возвращая конечный результат вашей функции ApiController.Собственно, просто сделать
await
можно. Как только ваш методasync
попадает aawait
, метод блокируется, но поток возвращается в поток бассейн. Когда метод готов к продолжению, любой поток вырван из пула потоков и используется для возобновления метода.
Я только что проверил это в консольной программе:
async Task foo()
{
int y = 0;
while (y<5) y++;
}
async Task testAsync()
{
int i = 0;
while (i < 100)
{
Console.WriteLine("Async 1 before: " + i++);
}
await foo();
while (i < 105)
{
i++;
Console.WriteLine("Async 1 after: " + i);
}
}
Вызов await foo()
не приводит к запуску потока testAsync
для возврата в пул потоков, testAsync
просто выполняется по строкам в одном потоке от начала до конца. Что мне здесь не хватает?