那么什么时候能用多线程? 任务能并发的时候

多线程能干嘛?提升速度/优化用户体验

网站首页:A数据库 B接口 C分布式服务 D搜索引擎,适合多线程并发,都完成后才能返回给用户,需要等待WaitAll
列表页:核心数据可能来自数据库/接口服务/分布式搜索引擎/缓存,多线程并发请求,哪个先完成就用哪个结果,其他的就不管了

现实实例

多人合作开发---多线程--提升效率/性能

 1               {
 2                 TaskFactory taskFactory = new TaskFactory();
 3                 List<Task> taskList = new List<Task>();
 4                 taskList.Add(taskFactory.StartNew(o=> Coding("A", " Portal"), "A"));
 5                 taskList.Add(taskFactory.StartNew(o=> Coding("B", "    DBA"), "B"));
 6                 taskList.Add(taskFactory.StartNew(o=> Coding("C", " Client"), "C"));
 7                 taskList.Add(taskFactory.StartNew(o=> Coding("D", "Service"), "D"));
 8                 taskList.Add(taskFactory.StartNew(o=> Coding("E", " Wechat"), "E"));
 9 
10                 //谁第一个完成,获取一个红包奖励
11                 taskFactory.ContinueWhenAny(taskList.ToArray(), t => Console.WriteLine($"{t.AsyncState}开发完成,获取个红包奖励{Thread.CurrentThread.ManagedThreadId.ToString("00")}"));
12                 //实战作业完成后,一起庆祝一下
13                 taskList.Add(taskFactory.ContinueWhenAll(taskList.ToArray(), rArray => Console.WriteLine($"开发都完成,一起庆祝一下{Thread.CurrentThread.ManagedThreadId.ToString("00")}")));
14                 //ContinueWhenAny  ContinueWhenAll 非阻塞式的回调;而且使用的线程可能是新线程,也可能是刚完成任务的线程,唯一不可能是主线程
15 
16 
17                 //阻塞当前线程,等着任意一个任务完成
18                 Task.WaitAny(taskList.ToArray());//也可以限时等待
19                 Console.WriteLine("准备环境开始部署");
20                 //需要能够等待全部线程完成任务再继续  阻塞当前线程,等着全部任务完成
21                 Task.WaitAll(taskList.ToArray());
22                 Console.WriteLine("5个模块全部完成后,集中调试");
23 
24                 //Task.WaitAny  WaitAll都是阻塞当前线程,等任务完成后执行操作
25                 //阻塞卡界面,是为了并发以及顺序控制
26             }
View Code

相关文章: