Sahil, qu'est-ce que vous essayez de faire en vous assurant que la jointure sur tous les threads est appelée sans avoir à attendre que chacun d'eux s'exécute? Si c'est pour la performance, cela n'aidera pas beaucoup, puisque de toute façon, même si vous êtes un thread.join sur tous les threads, il doit attendre que chaque thread soit terminé avant de continuer.
Quoi qu'il en soit si vous devez, alors voici ce que je dois dire:
Il n'y a pas de méthode directe d'attente sur tous les fils dans un stmt. Au lieu de quelque R & D j'ai trouvé une petite méthode indirecte. Au lieu d'initialiser un thread et de lui passer un ParameterizedThreadDelegate, vous pouvez directement lancer BeginInvoke sur ParameterizedThreadDelegate. Et puis vous pouvez utiliser WaitHandle.WaitAll pour attendre que tous les délégués aient fini d'exécuter avant de continuer.
Voici le code:
class Program
{
static void Main(string[] args)
{
List<ParameterizedThreadStart> listDelegates = new List<ParameterizedThreadStart>();
listDelegates.Add(new ParameterizedThreadStart(DelegateEg.Print));
listDelegates.Add(new ParameterizedThreadStart(DelegateEg.Display));
List<WaitHandle> listWaitHandles = new List<WaitHandle>();
foreach (ParameterizedThreadStart t in listDelegates)
listWaitHandles.Add(t.BeginInvoke("In Thread", null, null).AsyncWaitHandle);
WaitHandle.WaitAll(listWaitHandles.ToArray());
Console.WriteLine("All threads executed");
Console.Read();
}
}
public class DelegateEg
{
public static void Print(object obj)
{
Console.WriteLine("In print");
Console.WriteLine(obj);
}
public static void Display(object obj)
{
Console.WriteLine("In Display");
Console.WriteLine(obj);
}
}
merci mais je pense que j'étais stupide.paul pêcheur est juste.il fonctionne déjà bien. –
oui ... j'impliquais la même chose ... de toute façon c'était bon r & d pour moi :) –