在Task.Run()中包装同步调用以使其异步有益吗?

Mon*_*key 3 .net async-await asp.net-web-api

我对这个问题的动机是因为我正在创建一个.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);
  });
Run Code Online (Sandbox Code Playgroud)

性能相似

 return httpClient.SendAsync(request)
Run Code Online (Sandbox Code Playgroud)

Ste*_*ary 8

我想通过转向异步方法来利用一些性能提升,但我想避免进入neo4j api库并重构同步方法以返回异步方法.

抱歉,async如果您只是将同步代码包装在内,那么您将失去服务器端的所有好处Task.Run.

async在服务器上很好,因为异步操作比线程更好.但是如果你正在使用Task.Run,那么无论如何你都在使用一个线程.