J'ai un code simple dans lequel le thread principal crée une nouvelle tâche. La tâche génère à son tour plusieurs tâches enfants. Le thread principal fait un 'wait' sur la tâche parente. J'observe que je n'obtiens pas la même sortie à travers plusieurs exécutions du programme. Dans le code ci-dessous, j'imprime la valeur de la variable d'itération dans chaque tâche, mais à travers différentes exécutions, seuls les sous-ensembles sont imprimés. Je comprends que l'exécution n'est pas ordonnée mais il faudrait quand même qu'elle soit complète dans la mesure où je m'attends à ce que 100 numéros soient imprimés (sans ordre particulier). Est-ce que l'appel de Wait n'attend pas que toutes les tâches enfants soient terminées? Je suis en cours d'exécution VS2010 système Team Beta1Résultats incohérents lors de l'exécution et de la génération de tâches enfant
static void Main(string[] args)
{
Console.WriteLine("Main executing on ThreadID:- " + Thread.CurrentThread.ManagedThreadId.ToString());
var task = Task.Factory.StartNew(WriteNumbers);
task.Wait();
}
private static void WriteNumbers()
{
Console.WriteLine("WriteNumbers executing on ThreadID:- " + Thread.CurrentThread.ManagedThreadId.ToString());
for (int i = 0; i < 100; i++)
{
int localInt = i;
Task.Factory.StartNew(() =>
{
Write(localInt);
}, TaskCreationOptions.DetachedFromParent);
}
}
private static void Write(int i)
{
Console.WriteLine("Worker Thread executing on ThreadID:-" + Thread.CurrentThread.ManagedThreadId.ToString() + " Value:" + i.ToString());
}
sonne comme un problème de concurrence – Kareem