ThreadPool e risorse condivise
Oggi dimostriamo un semplice utilizzo del ThreadPool di .NET osservando in maniera molto semplice che i Thread vengono riutilizzati.
Per accodare una richiesta al ThreadPool utilizzeremo la classe Task, con un semplice contatore terremo traccia dei Task creati e stamperemo a video l'Id del Thread che lo esegue.
var tasks = new Task[100]; for (int i = 0; i < 100; i++) { var j = i; tasks[i] = Task.Run(() => { Console.WriteLine("Task = {0}, ThreadId = {1}", j, Thread.CurrentThread.ManagedThreadId); Thread.Sleep(1000); }); } Task.WaitAll(tasks); Console.ReadLine();
All'interno del Task stampiamo a video il numero progressivo del Task stesso e Id nel Thread in cui viene eseguito poi aspettiamo 1 secondo per simulare del lavoro. Con il comando WaitAll aspettiamo che tutti i Task siano completati.
Per completezza riportiamo uno screenshot dei risultati che mostra chiaramente come i ThreadId si ripetano uguali per diversi Task. Questo ovviamente ci dice che c'è bisogno di fare attenzione all'utilizzo di risorse interne al Thread che possono essere condivise tra più Task.

comments powered by Disqus