2014-05-13 4 views
0

현재 단일 스레드에서 실행중인 메소드가 있습니다. 이 방법에서는 변수를 사용하여 저장합니다. HTTPContext.Current.Session["VariableName"] = "VariableValue"스레드에 변수를 저장하는 방법은 무엇입니까?

그러나 이제는 병렬로 여러 스레드에서 같은 방법을 실행하고 싶습니다. 명백한 이유 때문에 위의 문장을 사용하여 변수를 저장할 수 없습니다. 이제는 같은 변수 이름을 사용하여 단일 스레드 내에서 이러한 변수를 개인적으로 저장해야합니다. 예

를 들어

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

친절하게 내가 직면하고이 문제에 적합한 솔루션을 제안?

+2

는 지역 변수가 사용자의 요구에 맞게하지 않을까요? –

+0

[ "VariableName"]에 일종의 스레드 키 [ "ThreadKey-VariableName"]를 항상 붙일 수 있습니다. –

+0

이러한 변수를 여러 메서드에 사용하므로 로컬 변수를 만들 수 없으므로 전역 범위의 변수가 필요합니다. – sachin

답변

1

변수 데이터를 Thread 범위에서만 사용할 수 있도록 변수에 대한 스레드 수준 저장 구조를 사용할 수 있습니다.이 경우 ThreadStatic 또는 ThreadLocal (.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(); 
     } 
} 
관련 문제