C# IHttpActionResult与异步任务<;IHttpActionResult>;
我见过的大多数Web API 2.0方法都返回C# IHttpActionResult与异步任务<;IHttpActionResult>;,c#,asynchronous,asp.net-web-api2,C#,Asynchronous,Asp.net Web Api2,我见过的大多数Web API 2.0方法都返回IHttpActionResult,它被定义为一个接口,“定义一个异步创建System.Net.Http.HttpResponseMessage的命令” 我对一个方法返回异步任务时会发生什么感到有点困惑 你为什么要用一个而不是另一个?或者这些功能相同吗?IHttpActionResult不是已经异步了吗?使用IHttpActionResult和async任务的区别在于您的代码是否使用了async和wait功能。许多像Entity Framework这
IHttpActionResult
,它被定义为一个接口,“定义一个异步创建System.Net.Http.HttpResponseMessage的命令”
我对一个方法返回异步任务时会发生什么感到有点困惑
你为什么要用一个而不是另一个?或者这些功能相同吗?IHttpActionResult
不是已经异步了吗?使用IHttpActionResult
和async任务
的区别在于您的代码是否使用了async
和wait
功能。许多像Entity Framework这样的库提供了方法的async
版本(例如savechangesync
),这些方法的性能略有提高。但是,在Web API中使用async
会有一些缺陷,因此,除非您了解许多特性,否则坚持使用同步API是谨慎的
Steven Cleary有很多关于async
和await
特性的信息。首先,我建议查看。您的操作可能会返回一个IHttpActionResult
,当框架调用其ExecuteAsync
时,该操作将异步执行
但是,如果在创建和返回结果之前必须先进行一些其他异步调用,则必须将签名更改为async Task
。仅此而已
如果控制器操作代码未使用wait
,则可以切换回更简单的签名。但是,返回的结果仍然是异步的
清楚地说,在这两种情况下,您都在使用异步代码
性能优势在于,如果对最深层的所有调用都是异步的,那么在磁盘或网络I/O期间不会阻塞web服务器线程,您的服务器可以用更少的资源处理更多的请求
在调用任务的Wait
或Result
之前,或在ASP.NET代码中自己创建任务之前,请仔细考虑
手动编写代码的两个正当理由,即故意多线程或web服务器代码的并行性:
- 当它接收最小流量但执行计算工作时,每隔一段时间就会调用一次,以便对数据运行计算,并且您希望使用所有16个核
- 当对数据库碎片或其他服务同时调用>1次时,您需要提前为每个碎片查询创建一个任务并等待它们全部完成
当您使用async
和wait
功能时,您需要返回一个任务
。@Romoku的想法是,只要您需要执行线程,就只使用async
?在执行简单CRUD操作的Web API方法的上下文中,使用返回IHttpActionResult
的方法与async Task
的方法之间是否存在功能上的差异?使用async
可能会在一定程度上提高性能,但对于大多数Web应用程序来说,这是可以忽略的。同步和异步在功能上没有区别。@Romoku谢谢,这让我有点困惑。如果你想把你的评论作为答案发表,我会把它标记为接受。他不是在比较异步API和同步API,而是在比较异步API和不同类型的异步API。