[vb.net][Multithreading] Problème avec multithreading de masse
Bonjour.
J'ai un problème avec le multithreading.
Je développe un service Windows qui va aller se connecter à n clients pour leur envoyer une commande.
Pendant mes premiers tests, quand j'avais peu de clients connectés, tout allait bien. Mais maintenant que j'ai environ 200 clients, ca ne marche plus.
Voici le fonctionnement actuel :
J'ai un thread qui effectue un foreach sur la liste des clients connectés.
Dans ce foreach, j'instancie un ManualResetEvent (situé dans un tableau), et j'appelle la fonction qui va faire la connection et tout par un ThreadPool.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| For Each c In ListeClients
manualEvents(i) = New ManualResetEvent(False)
Dim _args As New List(Of Object)
_args.Add(strProgName)
_args.Add(strArgs)
_args.Add(stream)
_args.Add(broadcastID)
_args.Add(c)
_args.Add(manualEvents(i))
ThreadPool.QueueUserWorkItem(AddressOf SendCommandThread, _args)
Trace.WriteLine("Created", "ThreadpoolCommand")
i += 1
Next |
Et ensuite j'attends que tous les manualResetEvent soient signalés pour continuer :
Code:
1 2 3 4 5 6
| If WaitHandle.WaitAll(manualEvents) Then
Trace.WriteLine("End", "ThreadpoolCommand")
Return CHAR_ACK
Else
Return CHAR_NACK
End If |
Le problème, c'est que WaitAll ne peut pas prendre en paramètre un tableau de plus de 64 manualResetEvents. D'où mon bug...
Auriez-vous une idée pour que je puisse contourner cette limitation ?
Merci !