测试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
- 测试C#代理的执行线程是新开还是在触发线程的代码
- 多线程中触发的事件函数在哪个线程中执行的测试
- ASIHttpRequest的requestFinish代理函数到底在什么线程执行
- ASIHttpRequest的requestFinish代理函数到底在什么线程执行
- ASIHttpRequest的requestFinish代理函数到底在什么线程执行
- 线程交替执行的代码
- C#在新的线程中执行逻辑
- C#线程池的代码
- 在C#中使用代理的方式触发事件
- 在C#中使用代理的方式触发事件
- 在C#中使用代理的方式触发事件
- 在C#中使用代理的方式触发事件
- 在C#中使用代理的方式触发事件
- 在C#中使用代理的方式触发事件
- 在C#中使用代理的方式触发事件
- 在C#中使用代理的方式触发事件
- 在C#中使用代理的方式触发事件
- 在C#中使用代理的方式触发事件
- HDOJ 5641-King's Phone【模拟】
- 我的博客今天开通啦
- 蓝桥杯 大臣的旅费
- 88. Merge Sorted Array
- jquery购物车插件minicart.js
- 测试C#代理的执行线程是新开还是在触发线程的代码
- 第一次上机实验—2
- 自定义照相机官方指南
- 怎样做到开发的app更省电
- Spark容错机制
- 集体智慧编程(二)发现群组
- Android-使用绝对布局管理器固定组件的位置
- dhu4508(完全背包)
- java反射