使用异步声明端点(并返回Task <ihttpactionresult>)与不使用async声明</ihttpactionresult>之间的区别>

时间:2014-12-19 22:02:31

标签: .net api asynchronous async-await

在.NET Web API 2的新引导项目中,为您自动创建的大多数端点(例如,AccountController中的任何端点)都被声明为异步并返回带有IHttpActionResult的Task。关于这个宣言,我有几个问题。

  1. 以这种方式声明端点与仅返回HttpResponseMessage之间的主要区别是什么?
  2. 对于非同步实现,此声明是否有任何主要优势? IE这会提高性能,可扩展性等......
  3. 是否以这种方式声明端点,期望请求来自异步调用,例如来自前端的AJAX调用,或者该声明是否只影响在后端处理该端点的执行情况?
  4. 非常感谢任何指针!

1 个答案:

答案 0 :(得分:0)

 3-Is an endpoint declared this way expecting the request to be coming from an async call,
 e.g. an AJAX call from a front-end, or does that declaration merely affect how the execution of that
 endpoint is handled on the back-end?

正如您所猜测的,这对客户端如何发送请求没有影响,但是会影响后端的执行和请求处理。

2- Are there any major advantages to this declaration over a non-sync implementation? 
IE Does this boost performance, scalability, etc...

当然,我们假设您的服务器可以同时处理多达10个请求,并且您有一个控制器,其中包含一个保存到数据库的操作,并且该保存过程需要5秒钟才能完成,在同步情况下,该线程处理您的请求闲置5秒钟等待保存过程完成,这意味着您的服务器无法使用该线程处理另一个请求,这意味着如果您有10个并发请求尝试保存到数据库,您的整个服务器将闲置等待这些请求完成导致您的服务器无法处理更多请求,这在网站上非常糟糕。 这种情况与Async不同,如果您的数据库ORM例如支持异步方法,那么您可以等待该方法完成,从服务器的角度来看,处理您的请求的线程可以被释放来处理另一个请求,这意味着您的服务器可以表现更好,等待你的方法,你需要使用C#支持的async / await。

1- What are the major differences between declaring an endpoint this way versus just returning an HttpResponseMessage?

要回答这个问题,我建议您访问this问题/答案

希望这有帮助。