我有一个包含几个网页链接的数组sources()
,它们通过GrabProxies()
函数。
For Each source In sources
ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf GrabProxies), source)
Next
我使用简单的Variable Incrementing方法来检查是否所有源都已完成。问题是它没有效率,有一半时间它没有检测到它(可能是因为两个线程在完全相同的时间完成了什么?)
Dim Sources_CountTemp As Integer
Private Function GrabProxies(source As String)
(...)
If Sources_CountTemp = sources.Count Then
console.writeline("Finished!")
End If
无论哪种方式,这都不是一种有效的方法。如何在完成后设置信号并完成少量代码?
编辑:变量方法实际上是无效的我运行了8次长函数运行(在它完成之前20-30秒)并且只有4/8次实际工作。 (使用15个线程)
编辑2:在源阵列上使用New Random()
后,似乎更多时间都在工作。所以这意味着当Time Out问题等发生时,它会使它无法正常工作。
有没有办法可以检查是否有任何ThreadPool线程正在运行?如果0正在运行则执行操作?只是在这里猜测。如果您对我应该怎么做有任何想法,请告诉我。
答案 0 :(得分:0)
我找到了解决方案!老实说,不知道为什么这个实际上有效,它不应该有所作为,但我测试了10次,所有10次都有效!
替换
copyValuesToRange
(或者您使用的任何增量方法):
Sources_CountTemp += 1