Disons que vous avez une liste de fichiers que vous souhaitez transférer en parallèle (un thread pour chaque fichier) et que vous voulez attendre jusqu'à ce que tous les téléchargements sont terminés, vous pouvez créer un tableau de WaitHandle
s (nombre de wait handles == nombre de fichiers == nombre de threads) et passe chaque thread l'un d'entre eux (wait handle: thread == 1: 1) avec le fichier que le thread doit transférer.
Le thread transfère le fichier et, avant qu'il n'existe, il définit le handle d'attente.
Dans le "thread principal", vous pouvez attendre que toutes les poignées d'attente du tableau soient définies en utilisant WaitHandle.WaitAll(WaitHandle[])
(je ne suis peut-être pas correct sur la syntaxe exacte, mais une commande existe, j'en suis sûr. Je l'ai utilisé avant).
C'est ce qu'on appelle une barrière.