У меня не было никаких причин, чтобы попробовать это, но это пришло мне в голову давным-давно.Ресурс, который я использую, чтобы справиться с этим, был ниже, но, опять же, я никогда этого не делал, потому что все изменилось и нет причин.
Атрибут ThreadStatic
Атрибут [ThreadStatic] указывает, что переменная имеет один экземпляр для каждого потока.Это вариация статических переменных.
Статические переменные имеют один экземпляр на протяжении всего жизненного цикла программы.Переменная, помеченная [ThreadStatic], имеет один экземпляр на поток в программе.
Подробнее см. В примере.
class Program
{
public static Int32 singleton = 0;
[ThreadStatic]
public static Int32 threadSingleton = 0;
static void Main(string[] args)
{
Program executingProgram = new Program();
Thread firstThread = new Thread(new ThreadStart(executingProgram.FirstThread));
Thread secondThread = new Thread(new ThreadStart(executingProgram.SecondThread));
firstThread.Start();
firstThread.Join();
secondThread.Start();
firstThread.Join();
Console.Read();
}
public void FirstThread()
{
singleton++;
threadSingleton++;
Console.WriteLine("Singleton = {0} ThreadSingleton = {1}", singleton.ToString(), threadSingleton.ToString());
}
public void SecondThread()
{
singleton++;
threadSingleton++;
Console.WriteLine("Singleton = {0} ThreadSingleton = {1}", singleton.ToString(), threadSingleton.ToString());
}
}
# Output
Singleton = 1 ThreadSingleton = 1
Singleton = 2 ThreadSingleton = 1