I have a method for processing strings from a datatable using multiple threads, it queues all work items and then checks that they were all processed, and not leaving this method until they are.
It seems to work fine in development, but when I paste it into the server (64-bit) for testing, it will not wait for the end of the method. It does not seem to make Thread.Sleep () calls, as the method is immediately deleted.
It will continue to process datarows after exiting the method, but that is not what I want.
Any ideas? Thanks
Public Sub ProcessAll(ByVal collection As DataTable, ByVal processDelegate As WaitCallback) Dim workItem As DataRow Dim availableThreads As Integer Dim completionPortThreads As Integer ThreadPool.SetMaxThreads(MAX_THREADS, MAX_THREADS) ' loop round processing each pending record adding them to the Thread Queue For Each workItem In collection.Rows ThreadPool.QueueUserWorkItem(processDelegate, workItem) Next ' The ThreadPool is a collection of background threads, thus we need to do something to stop the main thread from moving on Do Thread.Sleep(1000) ThreadPool.GetAvailableThreads(availableThreads, completionPortThreads) ' in the case that all threads are free (how we check all are complete) wait a few seconds just to make sure If availableThreads = MAX_THREADS Then Thread.Sleep(5000) ThreadPool.GetAvailableThreads(availableThreads, completionPortThreads) End If Loop While availableThreads < MAX_THREADS End Sub
source share