首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.NET - QueueUserWorkItem完成

VB.NET - QueueUserWorkItem完成
EN

Stack Overflow用户
提问于 2016-07-28 18:11:39
回答 1查看 244关注 0票数 0

我有一个包含一些网页链接的数组sources(),它们通过GrabProxies()函数。

代码语言:javascript
复制
For Each source In sources
    ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf GrabProxies), source)
Next

我使用一个简单的变量递增方法来检查是否所有源代码都完成了。问题是它的效率不高,一半的时间它没有检测到它(可能是因为两个线程在完全相同的时间完成了,或者别的什么?)

代码语言:javascript
复制
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正在运行,那么执行一个操作?在这里只是猜测。如果你有任何关于我应该怎么做的想法,请告诉我。

EN

回答 1

Stack Overflow用户

发布于 2016-07-29 20:37:22

我找到解决方案了!老实说,我不知道为什么它会像现实中那样有效,但我测试了10次,所有10次都有效!

Sources_CountTemp += 1 (或您使用的任何类型的增量方法)替换为:

Invoke(New MethodInvoker(Sub() Sources_CountTemp += 1))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38633386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档