Démarrer un thread avec / sans délégué ()

Quelle est la différence entre:

new Thread(new ThreadStart(SomeFunc))

et:

new Thread( delegate() { SomeFunc();} )

Ce code donne étrange sorties sur mon ordinateur:

public class A
{
    int Num;

    public A(int num)
    {
        Num = num;
    }

    public void DoObj(object obj)
    {
        Console.Write(Num);
    }

    public void Do()
    {
        Console.Write(Num);
    }
}

///////in void main()

for (int i = 0; i < 10; i++)
{
    (new Thread(new ThreadStart((new A(i)).Do))).Start(); //Line 1
    (new Thread(new ThreadStart(delegate() { (new A(i)).Do(); }))).Start(); //Line 2
    (new Thread(delegate() { (new A(i)).Do(); })).Start(); //Line 3
}

Si seule la Ligne 1 est exécutée la sortie est quelque chose comme:

0 2 3 1 5 6 4 7 8 9

qui est ok, mais si la Ligne 2 ou 3 est exécutée, la sortie est de:

3 3 3 5 5 7 7 9 9 10

Il y a quelques plusieurs numéros et un 10 qui est assez étrange que la boucle n'est jamais exécuté avec le numéro 10. Quel est le truc derrière ces?

Grâce.

source d'informationauteur ali_bahoo | 2010-11-09