【问题标题】:Two async postbacks at the same time?同时进行两个异步回发?
【发布时间】:2009-10-14 17:10:21
【问题描述】:

我有两个计时器,一旦页面呈现,每个计时器都会立即触发异步回发。每个异步回发都会加载一些昂贵的数据。因此,当我对此进行调试时,似乎发生了第一次异步回发并显示了结果,然后仅在第一次异步回发完成后才发生第二次异步回发。

所以,我的问题是由 PageRequestManager 或其他什么/什么排队的异步回发?我想我要说的是我想同时执行两个异步回发并在结果准备好时处理它们。有没有办法让我做到这一点?我看到的可能是调试的结果吗?

免责声明:我们的用户不多,但页面需要快速加载。因此我们并不关心处理一个页面需要多少线程。

有什么想法吗?感谢阅读。

【问题讨论】:

  • 我是个白痴...我想出了一个测试: 在第一次异步回发发生之前,不会显示第二个警报。所以,我猜 PageRequestManager 实际上确实将异步回发排队。有人同意/不同意吗?我怎样才能完成我想要的?

标签: asp.net ajax


【解决方案1】:

您不能同时进行两个异步回发,因为它们必须访问:

  1. 到用户会话,你不能 同步会话修改 在 2 个请求之间
  2. 到 Page ViewState 并且您不能在响应中返回两个不同的不相关的 ViewState,这些 ViewState 在每个异步请求上重新创建。

您可以向无会话 HttpHandler 发出少量异步请求。如果我错了,请纠正我:)

【讨论】:

    【解决方案2】:

    所以场景如下:

    1. 定时器 T1 触发调用函数 F1。 F1 导致向服务器回调 C1
    2. 定时器 T2 触发调用函数 F2。 F2 导致向服务器回调 C2

    如果 T1 和 T2 “恰好”同时触发,那么 JavaScript 就不能同时处理 F1 和 F2,因为 JavaScript 是单线程环境。必须先完成其中一个事件(例如 F1),然后才能触发另一个事件 (F2)。

    请参阅 John Resig 的以下精彩文章:How Javascript Timers Work

    但是,我的理解是回调 C1 和 C2 是异步运行的,因此在将 C1 触发到服务器后,F1 可以完成允许 F2 运行并且 C2 被触发到服务器。

    如果说 C2 在 C1 之前返回分数,那么 C2 的结果必须在 C1 的结果之前被完全处理。

    那么为什么你没有看到这种行为呢?

    我不确定,但您的开发环境是否有效地限制了可以按顺序处理的线程数?如果您在调试环境之外的 Windows 服务器上运行它,会是什么行为?

    【讨论】:

      猜你喜欢
      • 2011-05-23
      • 2017-01-22
      • 2023-02-05
      • 2014-03-31
      • 2021-10-22
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多