/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy
Publisher: Sybex;
ISBN: 0782129110
*/
/*
Example14_4.cs illustrates the use of thread-local storage
*/
using System;
using System.Threading;
public class Example14_4
{
// the WriteError method writes error info from the current thread
public static void WriteError()
{
Console.WriteLine("Error number = " + Thread.GetData(Thread.GetNamedDataSlot("ErrNo")));
Console.WriteLine("Error source = " + Thread.GetData(Thread.GetNamedDataSlot("ErrSource")));
}
// the SetError method sets a random error number
public static void SetError()
{
Random r = new Random();
Thread.SetData(Thread.GetNamedDataSlot("ErrNo"), r.Next(100));
Thread.SetData(Thread.GetNamedDataSlot("ErrSource") ,Thread.CurrentThread.Name);
WriteError();
}
public static void Main()
{
// allocate some named data slots
Thread.AllocateNamedDataSlot("ErrNo");
Thread.AllocateNamedDataSlot("ErrSource");
// create and start a second thread
Thread t2 = new Thread(new ThreadStart(SetError));
t2.Name = "t2";
t2.Start();
// create a third thread
Thread t3 = new Thread(new ThreadStart(SetError));
t3.Name = "t3";
t3.Start();
// clean up the data slots
Thread.FreeNamedDataSlot("ErrNo");
Thread.FreeNamedDataSlot("ErrSource");
}
}