测试C#代理的执行线程是新开还是在触发线程的代码

来源:互联网 发布:南京java开发工资 编辑:程序博客网 时间:2024/06/05 19:02

测试目的是要确保线程安全性,一直怀疑特此证明,结果是安全:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace TestPlatform{    class Program    {        public static volatile bool s_SystemRun = true;         static void Main(string[] args)        {            string order = string.Empty;            do            {                TestCore testCore = new TestCore();                Thread threadTestCore1 = new Thread(new ThreadStart(testCore.ThreadCore1));                threadTestCore1.Start();                Console.WriteLine("Start:"+threadTestCore1.ManagedThreadId.ToString());                Thread threadTestCore2 = new Thread(new ThreadStart(testCore.ThreadCore2));                threadTestCore2.Start();                Console.WriteLine("Start:" + threadTestCore2.ManagedThreadId.ToString());                Console.WriteLine("input exit for close:");                order = Console.ReadLine();            } while (order == null || !order.Equals("exit"));            s_SystemRun = false;            Thread.Sleep(5000);            System.Environment.Exit(0);            return;        }    }    public class TestCore    {        private Func<int, string, int> msgProcess;         public void ThreadCore1()        {            msgProcess = this.msgProcess1;            int delegateThreadId = msgProcess(1, "3");            Console.WriteLine("Test1:" + Thread.CurrentThread.ManagedThreadId.ToString() + ",func:" + delegateThreadId.ToString());            while(Program.s_SystemRun)            {                delegateThreadId = msgProcess(1, "3");                if (delegateThreadId != Thread.CurrentThread.ManagedThreadId)                {                    Console.WriteLine("Test1:" + Thread.CurrentThread.ManagedThreadId.ToString() + ",func:" + delegateThreadId.ToString());                }                Thread.Sleep(1);            };        }        public void ThreadCore2()        {            msgProcess = this.msgProcess2;            int delegateThreadId = msgProcess(1, "3");            Console.WriteLine("Test2:" + Thread.CurrentThread.ManagedThreadId.ToString() + ",func:" + delegateThreadId.ToString());            while (Program.s_SystemRun)            {                delegateThreadId = msgProcess(1, "2");                if (delegateThreadId != Thread.CurrentThread.ManagedThreadId)                {                    Console.WriteLine("Test2:" + Thread.CurrentThread.ManagedThreadId.ToString() + ",func:" + delegateThreadId.ToString());                }                Thread.Sleep(1);            };        }        public int msgProcess1(int param1,string param2)        {            return Thread.CurrentThread.ManagedThreadId;        }        public int msgProcess2(int param1, string param2)        {            return Thread.CurrentThread.ManagedThreadId;        }    }}

0 0
原创粉丝点击