Web.API 2 - 请求的异步执行

时间:2017-09-28 10:14:29

标签: c# asp.net asynchronous

如果以下方法存在显着性能差异,我目前正在调查项目:

    [HttpGet]
    public async Task<IHttpActionResult> Test1()
    {
        await Task.Delay(TimeSpan.FromSeconds(10));
        return Ok();
    }

    [HttpGet]
    public IHttpActionResult Test2()
    {
        Thread.Sleep(TimeSpan.FromSeconds(10));
        return Ok();
    }

在我的理解中,第一个方法Test1是异步执行的,这意味着等待task.delay的结果,并且当前线程可以被其他请求重用。

第二种方法Test2同步执行,线程被阻塞10秒。然而OK结果是异步执行的,因为我的返回类型是IHttpActionResult。

我的问题如下:

  1. 返回IHttpActionResult与任务有关的好处&lt; IHttpActionResult&gt;?
  2. 我使用wcat性能工具在本地计算机上测试了这两种方法,使用了2个客户端和40个虚拟客户端,这两种方法都得到了类似的结果。我期望通过第一种方法,我可以执行比第二种方法更多的请求。所以我的这个测试设置是错误的还是我误解了异步/同步执行的影响?
  3. 期待您的回答!

1 个答案:

答案 0 :(得分:0)

如果您可以将网站置于负载之下,即只能同时运行大量请求,您将只能看到运行Async方法的好处。只需运行一次就可以看出没有区别。

异步代码运行速度不快;它允许系统管理其线程池并提高并发性 - 即可以更有效地使用可用线程。

见Stephen Cleary的解释:

Async and Await