//#define UseThreadContext using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Caching; using System.Runtime.Remoting.Messaging; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ConsoleApplication7 { class Program { static void Main(string[] args) { TestContext(); } private static void TestContext() { for (int i = 0; i < 10000; i++) { var j = i; var t = new Thread(() => { MyThreads m = new MyThreads(); m.Run(j); Thread.Sleep(new Random(i).Next(1, 9)); m.Print(); }); t.Start(); } Console.ReadKey(); } public class MyThreads { private int I; #if !UseThreadContext [ThreadStatic] private static int x; #endif public void Run(int i) { this.I = i; #if UseThreadContext CallContext.HostContext = i; #else x = i; #endif } public void Print() { #if UseThreadContext var contexti = (int)CallContext.HostContext; #else var contexti = x; #endif if (contexti != I) { throw new Exception("not Equals" + contexti + "VS" + I); } Console.WriteLine(contexti); } }
原文:http://www.cnblogs.com/zbw911/p/4273923.html