我有一个当前在单个线程上运行的方法。在这个方法中,我使用HTTPContext.Current.Session["VariableName"] = "VariableValue"
但是现在我想在多个线程上并行运行上面相同的方法。由于显而易见的原因,我无法使用上述语句存储我的变量。现在我需要使用相同的变量名将这些变量私下存储在单个线程中。例如
Thread1 ValueofVar = "xyz";
Thread2 ValueofVar = "abc";
Thread3 ValueofVar = "jkl";
请为我面临的这个问题提出合适的解决方案吗?
答案 0 :(得分:1)
您可以为变量使用线程级存储构造,通过该构造,您的变量数据仅在Thread
的范围内可用 - 为此,使用ThreadStatic
或{{ 3}}(.NET 4及更高版本)。
ThreadLocal
的示例:
using System;
using System.Threading;
using System.Threading.Tasks;
class ThreadLocalDemo
{
static void Main()
{
ThreadLocal<string> ThreadName = new ThreadLocal<string>(() =>
{
return "Thread" + Thread.CurrentThread.ManagedThreadId;
});
Action action = () =>
{
bool repeat = ThreadName.IsValueCreated;
Console.WriteLine("ThreadName = {0} {1}", ThreadName.Value, repeat ? "(repeat)" : "");
};
Parallel.Invoke(action, action, action, action, action, action, action, action);
ThreadName.Dispose();
}
}