线程休眠和设置超时问题
Thread Sleep and setTimeout issues
我确定我可能在这里缺少一些逻辑元素,但从表面上看,我正在做的事情应该有效。 为了首先为您提供一个概述,我使用 vb.net 循环浏览网格视图并提取我存储在会话变量中的值。 然后,它通过 javascript 打开一个页面,并使用打开的页面上的会话变量从填充页面的数据库中提取数据。 它从被覆盖的渲染函数中抓取 HTML,并将其拉入到文件中。
其中大部分效果很好,但问题是,当我在循环中使用 Thread.Sleep 时,它会在所有页面的总持续时间内休眠 - 例如,如果我打开 10 个页面并且有 5 秒的睡眠时间,线程会停止 50 秒,然后快速触发 window.open。如果我使用 javascript 并设置超时暂停 5 秒,它会在第一次通过,但再次快速触发网格视图中的其余文档。
这是我目前拥有的:
Protected Sub ArchiveAll_Click(sender As Object, e As EventArgs) Handles ArchiveAll.Click
Dim rowcount As Integer = GridView1.Rows.Count
Dim counter As Integer = 0
Dim url = "foo.aspx?"
Dim IDGrab As String = ""
Dim IDGrab2 As String = ""
Session("IDHolder") = Now.Year.ToString + Now.Month.ToString + Now.Day.ToString + Now.Hour.ToString + Now.Minute.ToString
While counter < rowcount
IDGrab = GridView1.Rows(counter).Cells(1).Text
IDGrab2 = GridView1.Rows(counter).Cells(2).Text
Session("FormID") = IDGrab
Session("UserName") = IDGrab2
WriteAction()
counter = counter + 1
End While
End Sub
Private Sub WriteAction()
Dim url = "foo.aspx?"
Response.Write("<script>setTimeout(function(){window.open('" & url & "','')},5000);</script>")
End Sub
所以它的作用 - 更准确地说 - 是点击ArchiveAll五秒钟后,它会打开~100个窗口,而不是打开一个,等待五秒钟,然后打开另一个。 崩溃的城市。
那么我在这里错过了什么?如果真的很简单,我什至可以踢自己。
由于它们都等待 5 秒,因此它们不会异步排队。如果要在每次之间等待 5 秒,则需要增加每次之间的时间。
window.setTimeout(...,5000);
window.setTimeout(...,10000);
window.setTimeout(...,15000);
更好的是,构建一个将 url 从数组中取出的函数。
var urls = ["page1.html","page2.html","page3.html"];
function openPage() {
var url = urls.shift();
window.open(url);
if (urls.length) {
window.setTimeout(openPage,5000);
}
}
openPage();
相关文章:
- iOS Safari Javascript设置超时问题
- Selebyun爬网程序超时问题C#
- 是否从超时内开始间隔是一个问题
- 设置超时功能在 chrome 扩展程序弹出窗口.js问题
- 清除超时的问题
- 加载资源时出现 OpenTok JS 连接超时问题
- 设置超时问题
- 线程休眠和设置超时问题
- 超时时单击动态标签时出现问题
- 正在获取ice候选项收集的超时问题
- 超时和滚动问题
- 会话超时问题
- 在For循环上设置超时/延迟的问题
- 下拉菜单超时问题
- 会话超时有问题
- JQuery超时问题与mouseout函数
- 这个清除超时有什么问题?
- 循环延迟超时问题
- Javascript超时问题
- 节点从 0.2.6 升级到 0.4.7 时出现超时问题.js