Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IHttpActionResult与异步任务<;IHttpActionResult>;_C#_Asynchronous_Asp.net Web Api2 - Fatal编程技术网

C# IHttpActionResult与异步任务<;IHttpActionResult>;

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这

我见过的大多数Web API 2.0方法都返回
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。