2009-12-22 5 views

Répondre

0

Je ne suis pas sûr que votre situation puisse être résolue par l'un de ces contextes de verrouillage. Vous voudrez peut-être vous pencher sur les E/S asynchrones et leurs différentes implémentations, mais plus particulièrement sur les classes WebRequest et Webresponse.

Vous n'avez pas dit si vous utilisiez les classes par défaut pour gérer votre FTP ou une bibliothèque personnalisée. Je suppose (peut-être à tort) que vous créez vous-même les gestionnaires FTP. Si vous utilisez une bibliothèque tierce, vous devez vérifier si elles prennent en charge Async IO ou multithreading sous une autre forme.

1

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.