Lucrezi cu multe Threaduri și faci treburi importante pe acolo.
Ai un coleg de muncă care-ți sabotează codul și-ți ascunde un Thread.Abort() în metoda folosită de delegatul threadului (ThreadStart sau ParameterizedThreadStart) pentru bonusul de Crăciun.
ThreadStart threadStart = new ThreadStart(DoImportantStuff);
Thread t = new Thread(threadStart);
t.Start();
//-- Do some
other important stuff
//--
//--evil
malicious code from envious developer
t.Abort();
//--Do
Important Stuff
static void DoImportantStuff()
{
//call to
SaveTheWorld(this);
SaveTheWorld(this);
CleanUpSaveTheWorld();
DoUselessStuff();
}
În acest moment cum o dai procedura SaveTheWorld a crăpat, lumea s-a sfârșit și colegul s-a ales cu prima de Crăciun în locul tău.
Pentru a împiedica aceste evenimente neplăcute există 2 metode : Thread.BeginCriticalRegion() și Thread.EndCriticalRegion() .
Ele împiedică executarea metodei .Abort sau tratarea/aruncarea unei excepții pentru codul aflat între cele 2 metode.
În concluzie codul corect pentru codul de mai sus este :
static void DoImportantStuff()
{
Thread.BeginCriticalRegion();
//call to
SaveTheWorld(this);
SaveTheWorld(this);
Thread.EndCriticalRegion();
CleanUpSaveTheWorld();
DoUselessStuff();
}
Poate știați, poate nu, oricum eu am scris :) Enjoy!
Technorati tags: c#, Threads