VB.NET - QueueUserWorkItem完成

时间:2016-07-28 10:11:39

标签: vb.net

我有一个包含几个网页链接的数组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正在运行则执行操作?只是在这里猜测。如果您对我应该怎么做有任何想法,请告诉我。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案!老实说,不知道为什么这个实际上有效,它不应该有所作为,但我测试了10次,所有10次都有效!

替换 copyValuesToRange(或者您使用的任何增量方法):

Sources_CountTemp += 1