Однако, с 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 просто выполняется по строкам в одном потоке от начала до конца. Что мне здесь не хватает?