为什么不在MVC应用程序中的所有操作上使用异步呢

Why not use Async on all actions in an MVC app?

本文关键字:操作上 异步 MVC 应用程序 为什么不      更新时间:2023-09-26

考虑到未来对更大可伸缩性的需求(假设使用量会增加),在新应用程序开发之初,对所有操作使用异步难道没有意义吗?

  • 这对get(主要返回View)和post(将执行一些存储/更新并返回jsonresult)来说有意义吗
  • 所有的帖子都将使用Jquery AJAX,这种"双异步"会起作用吗

该操作是否真的以任何方式从异步使用中受益?

如果它做到了,哪怕只是轻微的,例如通过点击文件I/O(使用async)、数据库(使用async)或Web服务(使用assync),那么这可能是值得做的。

如果它只是受CPU限制,那么它将使事情变得稍微有价值(异步不是免费的),并且一无所获。

同样值得注意的是,如果您将操作从异步更改为非异步,反之亦然,则代码更改可能是本地的,因此"我们将来可能需要这样做"没有真正的价值。如果你有一个操作,例如,现在只是返回一个没有其他工作的视图(在async中没有值),然后稍后将其更改为访问数据库(在assync中有值),那么你就可以更改为async,这不会是一个复杂的更改。

所有的帖子都将使用Jquery AJAX,这种"双异步"会起作用吗?

你的意思是,在ajax是异步的意义上也是异步的?完全不连接,每一个都可以是异步的,无论代码的其他部分是否具有零轴承。

Javascript实际上并没有异步执行任何操作。如果不使用web工作程序,就无法编写异步函数。您所能做的就是启动一个异步运行的进程,如fileReader、XMLHttpRequest、图像/资源加载、setTimeout、setInterval等。这些进程不是javascript。然后在需要时将调用(事件)放置在调用堆栈上。它们在不同的线程上运行,可以说是与javascript异步的,但javascript仅限于单个线程,一次只能执行一个函数,一次只执行一条指令。

因此,javascript(不包括web工作者)本身就不能异步运行。即使是与事件相关联的回调也必须一次处理一个,所有so call"async"事件都会被当前运行的调用阻止。如果不退出,调用堆栈上的回调将不会被调用,这将最终导致调用堆栈溢出。

异步调用任何javascript都表明了对javascript代码运行方式的误解。所谓的"异步javascript"应该更准确地称为"事件驱动"编程。