我已经有了此代码,假设我正在迭代100多个项目。我第一次迭代列表时,距离测试事件发射了100次。太好了,这很容易。
现在是令人讨厌的未知错误当前会给我头痛,如果它也给我一个例外,那么我可能会更容易地弄清楚什么问题。
在这里是:第二次我在列表上迭代,每次,代理事件发射了99次。我的1次迭代发生了什么?
p.s。 对于我的项目,任务吞吐量比产卵说的500个我自己的线程要慢得多,因此,由于这个原因,我不想使用它们。只是在不可避免的建议之前说。它看起来可能不太漂亮,但是与创建任务列表并将其传递到任务相比,它的运行非常快。
P.S.S。 另外,在使用同时收集的建议之前,此处也需要使用数据表,因为我还在该项目中使用sqlitedataadapter.update,该项目仅采用数据词或数组。
。Dim counter as integer = 0
For i = 0 To ThreadCount - 1
Dim t As New Thread(Sub()
Do
Dim item As DataRow = Nothing
Dim req As HttpWebRequest = Nothing
SyncLock lock
If counter > Proxies.Rows.Count Then
Exit Do
End If
item = Proxies(counter)
Interlocked.Increment(counter)
Dim judge As DataRow = validJudges(rnd.Next(0, validJudges.Count))
Dim proxy As String = item("ip") & ":" & item("port")
req = HttpWebRequest.Create(judge("url"))
req.Proxy = New WebProxy(proxy)
req.Timeout = Timeout
Debug.WriteLine(counter)
End SyncLock
Dim statusText As String = ProxyTest.GetStatus(req, "<title>AZ Environment variables 1.04</title>", externalIp)
SyncLock lock
item("statusText") = statusText
If statusText = "Valid" Then
Interlocked.Increment(ValidCount)
Else
Interlocked.Increment(InvalidCount)
End If
Interlocked.Increment(CompletedCount)
RaiseEvent ProxyTested(item)
End SyncLock
Loop
mre.Set()
End Sub)
t.Start()
Next
mre.Reset()
mre.WaitOne()
每次我称此方法解决我的问题时,请重新初始化我的手动Resetevent :)
mre = new ManualResetevent(false(
以前MRE是一个全局,仅在加载过程中一次初始化一次。