线程在使用wait时返回到线程池

本文关键字:线程 返回 wait | 更新日期: 2023-09-27 18:22:04

但是,使用ASP.NET Web Api,如果您的请求来自线程,然后等待某个函数并调用ConfigureAwait(false)当你返回ApiController函数的最终结果。

事实上,只要做一个await就可以做到这一点。一旦您的async方法命中一个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只是在同一个线程上从头到尾逐行运行。我在这里少了什么?

线程在使用wait时返回到线程池

我在这里少了什么?

您缺少编译器警告

警告CS1998此异步方法缺少"wait"运算符,将同步运行。请考虑使用'await'运算符等待非阻塞API调用,或使用'await Task.Run(…)'在后台线程上执行CPUbound工作。

方法foo并不是真正异步的,因为其中没有await调用。
尝试在其中添加await Task.Delay