我有一個包含一些網頁鏈接數組sources()
,他們經過GrabProxies()
功能。VB.NET - QueueUserWorkItem完成
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()
。所以這意味着當超時問題等發生時,它使它不能工作。
有沒有辦法來檢查是否有任何ThreadPool線程正在運行?如果0運行,然後做一個動作?只是在這裏猜測。如果你對我應該怎麼做有任何想法,請告訴我。
你有一個競爭條件 - 因此推動增量的UI消除了比賽。 – Enigmativity