Dav*_*len 5 asynchronous asp.net-web-api
我是否需要做任何事情来使所有请求异步,或者它们是否以这种方式自动处理?
我运行了一些测试,似乎每个请求都来自自己的线程,但我认为最好询问,因为我可能测试错误。
更新:(我有一个不完全解释的坏习惯 - 抱歉)这是我的担忧。客户端浏览器向我的服务器http://data.domain/com/employee_database/?query=state:Colorado发出 REST 请求。这涉及到控制器中适当的方法。该方法查询数据库并返回一个对象,然后将该对象转换为 JSON 结构并返回给调用应用程序。
现在假设 10,000 个客户端都向同一服务器发出类似的查询。所以我一下子收到了 10,000 个请求。我的控制器方法会在 10,000 个不同的线程中同时调用吗?或者第一个请求必须在调用第二个请求之前返回?
我不是在询问具有异步组件的处理程序方法中的代码。对于我的情况,请求变成单个 SQL 查询,因此代码没有任何可以异步处理的内容。在获得请求的数据之前,我无法从该方法返回。
说实话,你的问题不是很清楚。如果您使用方法进行 HTTP GET HttpClient
,则GetAsync
请求将被触发,您可以在线程中执行任何您想要的操作,直到收到响应为止。所以,这个请求是异步的。如果您询问处理此请求的服务器端(假设它是 ASP.NET Web API),那么异步与否取决于您如何实现 Web API。如果您的操作方法在阻塞模式下同步执行三件事,即 1、2 和 3,则同一个线程将为请求提供服务。另一方面,假设上面的 #2 是对 Web 服务的调用,并且它是 HTTP 调用。现在,如果您使用 HttpClient 并进行异步调用,则可能会遇到一个请求由多个线程提供服务的情况。为此,您应该从操作方法异步进行 HTTP 调用并使用async
关键字。在这种情况下,当您await
在操作方法内部调用时,您的操作方法执行将返回,并且为您的请求提供服务的线程可以自由地为其他一些请求提供服务,最终当响应可用时,相同或其他一些线程将从原来的位置继续先前已停止。冗长乏味的答案,也许但很难通过打字来解释,我想。希望你能得到一些澄清。
更新: 您的操作方法将在 10,000 个线程中并行执行(理想情况下)。我之所以说理想是因为具有 10,000 个线程的 CLR 线程池并不典型,而且可能也不切实际。也存在物理限制以及框架施加的限制,但我想您问题的答案是请求将并行处理。这里正确的术语是“并行”,而不是“异步”。
归档时间: |
|
查看次数: |
8833 次 |
最近记录: |