ThreadContext

//#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);

            }

        }

你可能感兴趣的:(context)