using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

/*
*    Esercizio 1: Creazione Base e Sincronizzazione con `Join`
*    Obiettivo: Comprendere come creare, avviare e attendere la terminazione di un thread.
*    Richieste:
*    Scrivere un programma che crea due thread
*    - Il primo thread deve eseguire un metodo che stampa i numeri da 1 a 5, con una pausa di 1 secondo tra ogni numero.
*    - Il secondo thread deve eseguire un metodo che stampa le lettere dalla 'A' alla 'E', con una pausa di 500 millisecondi tra ogni lettera.
*    - Il thread principale (`Main`) deve avviare entrambi i thread e poi attendere che entrambi abbiano terminato il loro lavoro prima di stampare un messaggio finale ("Lavoro completato.") e chiudersi.
*    - Utilizza il metodo `Join()` per garantire che il `Main` aspetti correttamente.
*/

namespace CompitoThread1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Clear();

            Thread numThread = new Thread(_ => StampaNumeri(1, 5, 1000));

            Thread letThread = new Thread(_ => StampaLettere('A', 'E', 500));

            numThread.Start();
            letThread.Start();

            numThread.Join();
            letThread.Join();

            Console.WriteLine("Lavoro completato");
        }

        static void StampaNumeri(int inizio, int fine, int pausaMs)
        {
            for (int i = inizio; i <= fine; i++)
            {
                Console.WriteLine(i);
                Thread.Sleep(pausaMs);
            }
        }

        static void StampaLettere(char inizio, char fine, int pausaMs)
        {
            for (char i = inizio; i <= fine; i++)
            {
                Console.WriteLine("  "+i);
                Thread.Sleep(pausaMs);
            }
        }
    }
}
