两个异步回发同时?

时间:2009-10-14 17:10:22

标签: asp.net ajax

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

所以,我的问题是由PageRequestManager排队的异步回发或什么/什么?我想我所说的是我想同时执行两个异步回发并在准备好后处理结果。有没有办法让这件事发生?我能看到的是调试的结果吗?

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

有什么想法吗?谢谢你的阅读。

2 个答案:

答案 0 :(得分:1)

您无法同时制作两个异步回发,因为他们必须访问:

  1. 到用户会话,你不能 同步会话修改 在2个请求之间
  2. 到Page ViewState,您无法使用两个不同的无关ViewState返回响应,这些ViewStates是在每个异步请求上重新创建的。
  3. 您可以向无会话的HttpHandler发出少量异步请求。如果我错了,请纠正我:)

答案 1 :(得分:0)

所以场景如下:

  1. 定时器T1触发呼叫功能F1。 F1导致回调C1到服务器
  2. 定时器T2触发呼叫功能F2。 F2导致回调服务器C2
  3. 如果T1和T2在“完全”同时触发,则JavaScript无法在同一时间处理F1和F2,因为JavaScript是单线程环境。其中一个事件(比如F1)必须在另一个事件(F2)被解雇之前完成。

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

    然而,我的理解是回调C1& C2是异步运行的,因此在关闭服务器C1后,F1可以完成允许F2运行并且C2被激活到服务器。

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

    那你为什么不看到这种行为?

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