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

C# Web.API 2-请求的异步执行,c#,asp.net,asynchronous,C#,Asp.net,Asynchronous,我目前正在调查一个项目是否存在显著的性能差异,方法如下: [HttpGet] public async Task<IHttpActionResult> Test1() { await Task.Delay(TimeSpan.FromSeconds(10)); return Ok(); } 据我所知,第一个方法Test1是异步执行的,这意味着等待task.delay的结果,并且当前线程可以被其他请求重用 第二个方法Tes

我目前正在调查一个项目是否存在显著的性能差异,方法如下:

    [HttpGet]
    public async Task<IHttpActionResult> Test1()
    {
        await Task.Delay(TimeSpan.FromSeconds(10));
        return Ok();
    }
据我所知,第一个方法Test1是异步执行的,这意味着等待task.delay的结果,并且当前线程可以被其他请求重用

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

我的问题如下:

  • 返回IHttpActionResult与返回任务相比是否有好处
  • 我使用Performance tool在本地机器上测试了这两种方法,使用了2个客户端和40个虚拟客户端,两种方法得到了相似的结果。我希望使用第一种方法可以比使用第二种方法执行更多的请求。所以要么我的测试设置错误,要么我误解了异步/同步执行的效果

  • 期待您的回答

    只有当您可以加载站点时,您才能看到运行异步方法的好处,即同时运行相当数量的请求。只要每运行一次,您就不会看到任何差异

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

    见斯蒂芬·克利里的解释:


    只有当您可以加载站点时,您才能看到运行异步方法的好处,即同时运行相当数量的请求。只要每运行一次,您就不会看到任何差异

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

    见斯蒂芬·克利里的解释:


    第一个方法在另一个线程中等待。第二个线程阻塞当前线程。不管怎样,更好的用法是等待任务。延迟(10)而不是线程。睡眠(10)第二个你浪费资源的方法是让一个线程什么都不做,第一个释放调用线程,并在其他点继续工作,就像Javascript中的承诺一样,当你等待时,你承诺最终你会归还一些东西或例外。我发现这本书非常好,因为它非常小,而且第一种方法在不同的线程中等待。第二个线程阻塞当前线程。不管怎样,更好的用法是等待任务。延迟(10)而不是线程。睡眠(10)第二个你浪费资源的方法是让一个线程什么都不做,第一个释放调用线程,并在其他点继续工作,就像Javascript中的承诺一样,当你等待时,你承诺最终你会归还一些东西或例外。我觉得这本书很好,因为它很小,很有核
        [HttpGet]
        public IHttpActionResult Test2()
        {
            Thread.Sleep(TimeSpan.FromSeconds(10));
            return Ok();
        }