C#多线程同步案例实操

好久没有写博客了,为了养成学习的习惯,培养积极年轻的心态,又回到了博客园这个平台继续撸起时隔多年未光顾的空间。

项目需求:

  实现一个简单的获取始发目的耗时、距离,将结果输出表格。

方案思路:

  通过多线程方式调用http请求,将结果数据输出表格。

关键点分析:

  1. 多线程线程池大小如何分配
  2. 如何确保所有线程执行完毕

技术关键点:

  1. 多线程同步EventWaitHandle对象使用

  2. ManualResetEvent线程信号使用
  3. 线程对象Thread使用
  4. ParameterizedThreadStart线程参数使用
  5. WaitHandle管理多线程状态

代码如下: 

复制代码
 1 private static void CalcDistance()
 2         {
 3             int threadCount = 10;
 4             pageSize = sourceList.Count / threadCount + 1;
 5             destList = new List<SiteDistance>();
 6             var waits = new List<EventWaitHandle>();
 7             for (int i = 0; i < threadCount; i++)
 8             {
 9                 var handler = new ManualResetEvent(false);
10                 waits.Add(handler);
11                 new Thread(new ParameterizedThreadStart(calcDistance))
12                 {
13                     Name = "thread" + i.ToString()
14                 }.Start(new Tuple<int, EventWaitHandle>(i, handler));
15             }
16             WaitHandle.WaitAll(waits.ToArray());
17 
18             expExcel();
19             Console.WriteLine("输出完成——》共生成" + destList.Count + "条数据,耗时:" + DateTime.Now.Subtract(startTime).TotalSeconds);
20             Console.ReadKey();
21         }
复制代码

 

posted @   汉城节度使  阅读(685)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示