c# - ASP.NET 异步和等待

标签 c# asp.net multithreading asynchronous

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

问题是:即使所有线程都在执行异步 I/O,是否应该处理对这种非阻塞方法的所有请求?

最佳答案

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

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

public static void MySyncMethod()
{
    GetFooAsync().Wait();
}

通过调用 .Wait(),我阻塞了线程。使用 async/await 实现该方法并不重要。 .Result

也会发生同样的事情

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

参见 this MSDN article 中的“一路异步” .您可能还希望观看这些 essential tips for async/await on Channel 9 .

关于c# - ASP.NET 异步和等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32639693/

相关文章:

c# - 多线程集差的有效方法

c# - .Net 配置 - 如何覆盖映射配置文件中的设置和自定义部分?

c# - 如何在 .net Windows 应用程序中存储数据

css - 如何在 ListView 中轻松创建固定标题 asp.net

asp.net - 将小整数值哈希为大的 16 位唯一数字

java - 编写多线程套接字代理: IOException SocketClosed where it shouldn't

c++ - 如何让线程等待而不轮询?

c# - 如何检查where的结果长度

c# - 框架升级到 3.5

asp.net - IIS 7.5 和 ASP.Net 中的身份验证设置有什么区别?