Поток, возвращающийся в пул потоков при использовании ждут

Однако, с ASP.NET Web Api, если ваш запрос поступает на один   поток, и вы ждете некоторую функцию и вызываете ConfigureAwait(false)  которые могут потенциально поставить вас на другой поток, когда вы   возвращая конечный результат вашей функции ApiController.

Собственно, просто сделать await можно. Как только ваш метод async попадает a await, метод блокируется, но поток возвращается в поток бассейн. Когда метод готов к продолжению, любой поток вырван из пула потоков и используется для возобновления метода.

Источник

Я только что проверил это в консольной программе:

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

Ответ 1

Что мне здесь не хватает?

Вам не известны предупреждения компилятора

Предупреждение CS1998 В этом асинхронном методе отсутствуют операторы "ждут" и будут выполняться синхронно. Подумайте о том, как использовать оператор "ожидание" для ожидания неблокирующих вызовов API или "ждать Task.Run(...)", чтобы выполнять работу с привязкой к процессору в фоновом потоке.

Ответ 2

Метод foo не является асинхронным, так как в нем нет вызовов await.
Попробуйте добавить await Task.Delay туда.