我提出这个问题的动机是因为我正在创建一个 .net Web API 项目,该项目将使用具有同步方法的现有 neo4j rest api 客户端。我想通过使用异步方法来利用一些性能提升,但我想避免进入 neo4j api 库并重构同步方法以返回异步方法。我想知道是否将对同步方法的调用包装在 await Task.Run() 中是否有益。具体来说,在第一个示例中,当来自 httpClient 的异步结果调用 Wait() 方法时会发生什么,但整个事情都包装在另一个 await 中。
还要记住,我将在 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)