我在控制器中编写了几个操作方法,以测试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每秒处理更多的请求。我是不是漏掉了什么?
是的,您忽略了这样一个事实,即异步与速度无关,它只与每秒请求的概念略微相关。
异步只做一件事。如果正在等待一个任务,并且该任务不涉及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, 并且遇到了以下两段代码。 第一个: 第二个: 我得到了他们应该做的事情,他们查询数据库以检索查询的答案。然后。 第一个应该是同步代码。第二个是异步代码。 这两部分之间的区别对我来说很模糊。输出是什么? 搜寻异步编程也无济于事。 问题答案: 区别在于,在第 一个示例中 ,程序将在第一行中阻塞。下一行()必须等待。 在 第二个示例中 ,将在处理查询时