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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !