当前位置: 首页 > 知识库问答 >
问题:

.NET核心Web Api异步无关紧要?

孙俊彦
2023-03-14

我一直使用Async关键字编写Web Api控制器方法,并且一直使用Async。我最近尝试了一个方法同步,以了解它将如何影响性能,但震惊地发现它对任何其他http请求都没有阻塞影响。

举个例子--

[Route("Foo")]
class FooController {
  [HttpGet("Hello")]
  public string GetHello()
  {
    Thread.Sleep(100000); // 100 seconds
    return "Hello";
  }

  [HttpGet("Goodbye")]
  public string GetGoodbye()
  {
    return "Goodbye";
  }
}

这样,我就可以运行get=>/foo/hello,然后运行任意数量的get=>/foo/goody,并且不会阻塞对goodyendpoint的请求。

我最初认为需要将Hello方法变为异步,这样对Goodbyeendpoint的请求就可以毫无延迟地返回。但是使此方法同步/异步没有任何效果!

很困惑。Web Api应用程序不需要异步吗?为什么推荐?

共有1个答案

曾嘉祯
2023-03-14

事情没那么简单。

有一种叫做线程池的东西。对应用程序的每个请求都被分配到从线程池中提取的一个单独的线程。这是一个请求不阻塞另一个请求的第一个原因。

现在,当你有低流量时,一切都很好,所以你不会达到线程池中线程的限制数量。但是...

 类似资料:
  • 我正在为PoC点构建我的dotnet core webapi服务,我关心的是为其他ARCH/Devs提供适当的指导。 “相同”方法签名的变化很少 公共动态获取(字符串名称=_defaultName) 公共IActionResult Get(字符串名称=_DefaultName) 获取公共异步任务(字符串名称=_defaultName) 撇开我为什么使用动态类型而不是自定义类型的讨论不谈,我试图理解

  • .NET核心和ASP.NET核心到底有什么区别?

  • 我已经创建了非核心webapi项目来与移动应用程序交互。例如,如果我创建了一个名为Data的控制器,它有一个名为Search的方法,如下图所示。该项目已配置为发送和接收json数据。 我可以通过使用以下url,使用postman向该方法发送post请求http://localhost/api/Data/search 类似地,我可以在控制器内创建其他函数,并使用路由“/api/[controller

  • 我读过关于.NET标准和.NET核心之间的区别,但我真的不知道区别是什么,也不知道什么时候选择.NET标准库项目,什么时候选择.NET核心库项目。

  • 与SqlAlchemy一起使用的异常。 基本异常类是 SQLAlchemyError . 由于DBAPI异常而引发的异常都是 DBAPIError . exception sqlalchemy.exc.AmbiguousForeignKeysError(*arg, **kw)¶ 在联接期间两个可选择项之间可以找到多个外键匹配时引发。 exception sqlalchemy.exc.Argumen

  • 我想知道,当我们为客户提供新的更新时,是否有丢失这些文件的风险。如果有更好的解决方案,上传文件和获取文件链接之后,与.NET core请告诉我:)