我有一个包含一些网页链接的数组sources(),它们通过GrabProxies()函数。
For Each source In sources
ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf GrabProxies), source)
Next我使用一个简单的变量递增方法来检查是否所有源代码都完成了。问题是它的效率不高,一半的时间它没有检测到它(可能是因为两个线程在完全相同的时间完成了,或者别的什么?)
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()时,似乎工作的时间更多了。因此,这意味着当超时、问题等发生时,它就不能正常工作了。
有没有办法检查是否有ThreadPool线程正在运行?如果0正在运行,那么执行一个操作?在这里只是猜测。如果你有任何关于我应该怎么做的想法,请告诉我。
发布于 2016-07-29 20:37:22
我找到解决方案了!老实说,我不知道为什么它会像现实中那样有效,但我测试了10次,所有10次都有效!
将Sources_CountTemp += 1 (或您使用的任何类型的增量方法)替换为:
Invoke(New MethodInvoker(Sub() Sources_CountTemp += 1))
https://stackoverflow.com/questions/38633386
复制相似问题