2014-05-13 53 views
0

我有一個目前正在單線程上運行的方法。在這個方法中,我使用HTTPContext.Current.Session["VariableName"] = "VariableValue"如何在線程上存儲變量?

存儲變量但是現在我想要在多個線程上並行運行上述相同的方法。出於顯而易見的原因,我將無法使用上述語句存儲我的變量。現在我需要在單線程中使用相同的變量名稱私有地存儲這些變量。例

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

請建議合適的解決這個問題,我面對的?

+2

將局部變量無法滿足您的需求? –

+0

你總是可以用某種線程鍵[「ThreadKey-VariableName」]爲你的[「VariableName」]加上前綴。 –

+0

由於我將這些變量用於多個方法,因此無法創建局部變量,因此需要具有全局範圍的變量。 – sachin

回答

1

對於變量,您可以使用線程級存儲結構,因此,變量數據將僅在Thread的範圍內可用 - 爲此,請使用ThreadStaticThreadLocal(.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(); 
     } 
}