You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mchsamples-.net-core/ex_050_007_Foreground_vs_Ba.../Program.cs

70 lines
2.9 KiB

using System;
using System.IO;
using System.Threading;
namespace ex_050_007_Foreground_vs_Background
{
class Program
{
//le travail que vont faire les 2 threads pendant qu'ils s'exécutent
static void ThreadAtWork(TextWriter tw, int i)
{
Console.WriteLine("{0} ({1})", i, Thread.CurrentThread.Name);
tw.WriteLine("{0} ({1})", i, Thread.CurrentThread.Name);
Thread.Sleep(1);
}
static void Main(string[] args)
{
//le premier thread affiche 200 fois l'entier i qui est incrémenté suivi du nom du thread entre parenthèses,
//dans la console, et dans un fichier
//La propriété IsBackground n'étant pas initialisée, elle prend la valeur par défaut qui est false
//Ce thread est donc Foreground
Thread threadAvant = new Thread(() =>
{
using (TextWriter tw = File.CreateText("avant.txt"))
{
for (int i = 0; i < 200; i++)
{
ThreadAtWork(tw, i);
}
}
})
{
Name = "foreground thread"
};
//le deuxième thread affiche 2000 fois l'entier i qui est incrémenté suivi du nom du thread entre parenthèses,
//dans la console, et dans un fichier
//La propriété IsBackground est initialisée à true
//Ce thread est donc Background
Thread threadArrière = new Thread(() =>
{
using (TextWriter tw = File.CreateText("arriere.txt"))
{
for (int i = 0; i < 2000; i++)
{
ThreadAtWork(tw, i);
}
}
})
{
Name = "background thread",
IsBackground = true
};
//Les 2 threads sont lancés et le thread principal est immédiatement terminé
threadAvant.Start();
threadArrière.Start();
//Vous pouvez observer que "foreground thread" est exécuté jusqu'à la fin,
//et que le fichier créé avant.txt est bien écrit et fermé correctement (le bloc using est correctement exécuté jusqu'à la fin).
//Vous pouvez observer que "background thread" n'est pas exécuté jusqu'à la fin (il continue jusqu'à la fin de foreground thread),
//et que le fichier créé arriere.txt n'est pas complétement écrit (le bloc using n'est pas terminé correctement) et Dispose
//n'est donc pas correctement appelé. Si vous voulez vous en assurer, avec un background thread, il faudra l'attendre.
//Note : les 2 fichiers sont accessibles après exécution dans l'explorateur de solutions, au niveau de ce projet.
}
}
}