当前位置: 首页 > 知识库问答 >
问题:

ASP.NET核心同步和异步控制器操作之间没有太大区别

边浩漫
2023-03-14

我在控制器中编写了几个操作方法,以测试ASP.NET核心中同步和异步控制器操作之间的差异:

[Route("api/syncvasync")]
public class SyncVAsyncController : Controller
{
    [HttpGet("sync")]
    public IActionResult SyncGet()
    {
        Task.Delay(200).Wait();

        return Ok(new { });
    }

    [HttpGet("async")]
    public async Task<IActionResult> AsyncGet()
    {
        await Task.Delay(200);

        return Ok(new { });
    }
}

正如您所看到的,每秒的请求没有太大差异--我希望异步endpoint每秒处理更多的请求。我是不是漏掉了什么?

共有1个答案

范麒
2023-03-14

是的,您忽略了这样一个事实,即异步与速度无关,它只与每秒请求的概念略微相关。

异步只做一件事。如果正在等待一个任务,并且该任务不涉及CPU绑定的工作,因此,线程变得空闲,那么,该线程可能会被释放,返回到池中执行其他工作。

就是这样。简单地说就是异步。异步的目的是更有效地利用资源。在您可能已经绑好了线程的情况下,只是坐在那里敲击他们的脚趾,等待一些I/O操作完成,他们可以被指派做其他工作。这就产生了两个你应该内化的非常重要的想法:

这并不意味着不应该使用异步。即使您的应用程序现在不流行,但这并不意味着以后不会流行,在那时重新调整所有代码以支持异步将是一场噩梦。异步的性能成本通常可以忽略不计,如果您最终确实需要它,它将是一个救命恩人。

更新

在保持异步的性能成本可以忽略不计方面,有一些有用的提示,在C#中大多数关于异步的讨论中,这些提示并不明显,也没有很好地说明。

await DoSomethingAsync().ConfigureAwait(false);
public async Task DoSomethingAsync()
{
    await DoSomethingElseAsync();
}

这里,doSomethingelSeasync返回一个等待并取消包装的任务。然后,创建一个新的任务,从DoSometingAsync返回。但是,如果相反,您将该方法编写为:

public Task DoSomethingAsync()
{
    return DoSomethingElseAsync();
}

doSomethingelSeasync返回的任务直接由doSomethingAsync返回。这减少了大量的开销。

 类似资料:
  • 本文向大家介绍同步和异步计数器之间的区别,包括了同步和异步计数器之间的区别的使用技巧和注意事项,需要的朋友参考一下 众所周知,在数字电子学中,计数器是由一系列触发器组成的顺序逻辑电路,用于按负或正边沿跳变来计数输入出现的次数。现在,基于触发器的触发方式,我们可以区分同步计数器和异步计数器。 以下是同步计数器和异步计数器之间的重要区别。 序号 键 同步计数器 异步计数器 1 触发 顾名思义,在使用同

  • 本文向大家介绍同步和异步传输之间的区别,包括了同步和异步传输之间的区别的使用技巧和注意事项,需要的朋友参考一下 在数字电子设备中,同步传输和异步传输都是串行数据传输的一种类型,其中,基于用于同步的时钟脉冲,数据在发送方和接收方之间进行传输。 以下是同步传输和异步传输之间的重要区别- 序号 键 同步传输 异步传输 1 定义 同步传输是一种传输类型,其中在发送器和接收器之间共享一个公共时钟脉冲以允许同

  • 我有一个Primeface应用程序,其中我启动了一个包含表单的对话框。对话框有一个保存/取消按钮对。在这个对话框中,我无法调用on完成、onstart等方法。我在其他回复中看到原因是没有执行AJAX。但是,我不知道这种情况下的原因,因为命令按钮的类型是提交,并且应该有ajax="true"(默认情况下)。有人能在里面放一点光吗? 我的xhtml: 这是我的后盾: 谢谢!

  • 本文向大家介绍thinkjs之页面跳转同步异步操作,包括了thinkjs之页面跳转同步异步操作的使用技巧和注意事项,需要的朋友参考一下 对于刚入手thinkjs项目的新手来说,时常会犯的一个错误就是“混用”各种代码逻辑,比如:我们经常在做后台管理系统的时候用到的登录框, 其实它原本是有一个路由专门存放自己的代码逻辑,而在点击提交按钮的时候,要达到的效果便是账号密码正确的时候,正常跳转页面,而错误的

  • 问题内容: 我一直在阅读nodebeginner, 并且遇到了以下两段代码。 第一个: 第二个: 我得到了他们应该做的事情,他们查询数据库以检索查询的答案。然后。 第一个应该是同步代码。第二个是异步代码。 这两部分之间的区别对我来说很模糊。输出是什么? 搜寻异步编程也无济于事。 问题答案: 区别在于,在第 一个示例中 ,程序将在第一行中阻塞。下一行()必须等待。 在 第二个示例中 ,将在处理查询时