J'utilise fréquemment un exemple banal de multiprogrammation pour enseigner les threads, exemple dans lequel j'affiche un petit point par seconde à la console jusqu'à ce qu'un usager appuie sur une touche. Ceci permet de combiner opération cyclique qui ne doit pas être bloquée et opération bloquante.
Voici une version C# opérationnelle et sans prétention, pour les curieuses et les curieux...
bool fini = false;
var th = new Thread(() =>
{
Console.ReadKey();
fini = true;
});
th.Start();
while(!fini)
{
Console.Write(".");
Thread.Sleep(1000);
}
th.Join();