如何在线程上存储变量?

时间:2014-05-13 13:10:18

标签: c# multithreading

我有一个当前在单个线程上运行的方法。在这个方法中,我使用HTTPContext.Current.Session["VariableName"] = "VariableValue"

存储变量

但是现在我想在多个线程上并行运行上面相同的方法。由于显而易见的原因,我无法使用上述语句存储我的变量。现在我需要使用相同的变量名将这些变量私下存储在单个线程中。例如

Thread1 ValueofVar = "xyz"; Thread2 ValueofVar = "abc"; Thread3 ValueofVar = "jkl";

请为我面临的这个问题提出合适的解决方案吗?

1 个答案:

答案 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();
        }
}