C#多线程同步案例实操
好久没有写博客了,为了养成学习的习惯,培养积极年轻的心态,又回到了博客园这个平台继续撸起时隔多年未光顾的空间。
项目需求:
实现一个简单的获取始发目的耗时、距离,将结果输出表格。
方案思路:
通过多线程方式调用http请求,将结果数据输出表格。
关键点分析:
- 多线程线程池大小如何分配
- 如何确保所有线程执行完毕
技术关键点:
-
多线程同步EventWaitHandle对象使用
- ManualResetEvent线程信号使用
- 线程对象Thread使用
- ParameterizedThreadStart线程参数使用
- 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 }