我提出这个问题的动机是因为我正在创建一个 .net Web API 项目,该项目将使用具有同步方法的现有 Neo4j Rest API 客户端。我想通过使用异步方法来利用一些性能提升,但我想避免进入 neo4j api 库并重构同步方法以返回异步方法。我想知道将对同步方法的调用包装在await Task.Run() 中是否会有好处。具体来说,第一个示例中当 httpClient 的异步结果调用 Wait() 方法时会发生什么,但整个事情都包装在另一个等待中。
另请记住,我将在 AppHarbor 云上运行它,我认为这是一个虚拟核心。
下面的也是如此
//what happens with the synchronous rest api client I am using
HttpResponseMessage SendHttpRequest(HttpRequestMessage request)
{
var requestTask = httpClient.SendAsync(request);
requestTask.Wait();
return requestTask.Result;
}
object result = await Task.Run(() =>
{
return SendHttpRequest(request);
});
性能类似于
return httpClient.SendAsync(request)
我想通过使用异步方法来利用一些性能提升,但我想避免进入 neo4j api 库并重构同步方法以返回异步方法。
抱歉,您将失去所有的好处async
在服务器端,如果您只是将同步代码包装在Task.Run
.
async
在服务器上很好,因为异步操作比线程具有更好的扩展性。但如果你正在使用Task.Run
,那么无论如何你都在使用线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)