2010-07-20 7 views
0

J'ai du mal à comprendre pourquoi rien est sortie en utilisant les éléments suivants:Console ThreadPool non exécution

class Program 
{ 
    static int m_Active = 500; 
    static void Main(string[] args) 
    { 
     ThreadPool.SetMaxThreads(5, 5); 
     Enumerable.Range(1, m_Active).ToList<int>() 
      .ForEach(i => ThreadPool.QueueUserWorkItem((o) => { DoWork(i); })); 
    } 

    private static void DoWork(int i) 
    { 
     new Action(() => { Console.WriteLine(i); }).Invoke(); 
     if (Interlocked.Decrement(ref m_Active).Equals(0)) 
      new Action(() => { Console.WriteLine("Done"); }).Invoke(); 
    } 
} 
+0

Je ne comprends pas pourquoi vous ne comprenez pas. Avez-vous essayé de le déboguer? Qu'est-il arrivé? –

Répondre

7

Parce que votre programme se termine avant qu'il ait tout moment pour exécuter les threads. Ajout d'un simple

Console.ReadLine(); 

à la fin de la méthode Main devrait faire tout aussi bien.

+1

Oui. La clé du problème est que les threads ThreaPool sont des threads d'arrière-plan, ils n'empêchent donc pas le processus de se terminer. –

Questions connexes