C# ASP.NET异步&等待

C# ASP.NET异步&等待,c#,asp.net,multithreading,asynchronous,C#,Asp.net,Multithreading,Asynchronous,我有一个ASP.NET应用程序。我正在对它进行负载测试,并通过使用外部工具运行并发请求,设法阻止线程池中的所有线程。由于网络上的I/O请求,所有线程都被阻塞,执行此操作的方法使用async和Wait关键字实现。我还有另一个控制器中的另一个方法,它只返回一个字符串,也就是说,第二个方法不执行I/O 问题是:即使所有线程都在执行asyn I/O,对这个非阻塞方法的所有请求都不应该被服务吗?当调用一个实现为异步的方法时,仍然可以被阻塞 public async Task GetFooAsync() {

我有一个ASP.NET应用程序。我正在对它进行负载测试,并通过使用外部工具运行并发请求,设法阻止线程池中的所有线程。由于网络上的I/O请求,所有线程都被阻塞,执行此操作的方法使用async和Wait关键字实现。我还有另一个控制器中的另一个方法,它只返回一个字符串,也就是说,第二个方法不执行I/O


问题是:即使所有线程都在执行asyn I/O,对这个非阻塞方法的所有请求都不应该被服务吗?

当调用一个实现为异步的方法时,仍然可以被阻塞

public async Task GetFooAsync()
{
    await DoSomethingElseAsync();
}

public static void MySyncMethod()
{
    GetFooAsync().Wait();
}
通过呼叫。等等,我正在阻止线程。使用async/await实现该方法并不重要。同样的事情也发生在。结果

异步方法需要一直异步使用——这意味着整个调用堆栈必须是异步的,才能是非阻塞的。在ASP.NET应用程序中,这意味着您将从控制器中的异步方法开始。如果控制器方法是同步的,那么调用异步方法仍然是阻塞的


请参阅中的异步。您可能还希望看到这些。调用实现为异步的方法时,仍然可以阻塞

public async Task GetFooAsync()
{
    await DoSomethingElseAsync();
}

public static void MySyncMethod()
{
    GetFooAsync().Wait();
}
通过呼叫。等等,我正在阻止线程。使用async/await实现该方法并不重要。同样的事情也发生在。结果

异步方法需要一直异步使用——这意味着整个调用堆栈必须是异步的,才能是非阻塞的。在ASP.NET应用程序中,这意味着您将从控制器中的异步方法开始。如果控制器方法是同步的,那么调用异步方法仍然是阻塞的


请参阅中的异步。您可能也希望观看这些内容。

实际上,我是在Windows 7上托管的IIS上测试我的应用程序的。但事实证明,Windows7将并发请求限制为10个。所以我在WindowsServer2008上运行,一切正常。现在,所有非阻塞请求都会立即运行,而阻塞请求需要一些时间才能完成。无论如何,谢谢。实际上,我在Windows7上的IIS上测试我的应用程序。但事实证明,Windows7将并发请求限制为10个。所以我在WindowsServer2008上运行,一切正常。现在,所有非阻塞请求都会立即运行,而阻塞请求需要一些时间才能完成。无论如何,谢谢你。