私はいくつかのWebページリンクを含むsources()
の配列を持っています。それらはGrabProxies()
関数を経由します。VB.NET - QueueUserWorkItem Completion
For Each source In sources
ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf GrabProxies), source)
Next
単純な変数インクリメンタル方式を使用して、すべてのソースが終了しているかどうかを確認します。問題は、それは効率的ではないということです、時間の半分はそれが(2つのスレッドが正確に同じ時間か何かで終えおそらくので?)、それを検出しない
Dim Sources_CountTemp As Integer
Private Function GrabProxies(source As String)
(...)
If Sources_CountTemp = sources.Count Then
console.writeline("Finished!")
End If
いずれかの方法では、それは効率的な方法ではありませんこれを機能させるにはどのように私は信号を取得し、終了時に少量のコードを完了することができますか?
EDIT:可変メソッドは実際には効率が悪いです。長い関数(それが終了する前に20〜30秒)を8回実行し、実際には4/8回しか実行しませんでした。 (15スレッドを使用)
EDIT 2:ソースアレイ上でNew Random()
を使用した後は、より多くの時間がかかるようです。タイムアウトの問題などが発生した場合、それはあまり効果がないように見えるようになります。
ThreadPoolスレッドが実行されているかどうかを確認する方法はありますか?そして、0が実行されている場合、アクションを実行しますか?ちょうどここで推測する。どうすればいいのか分かっていれば教えてください。
- ので、UIへの増分を押してレースを排除します。 – Enigmativity