TaskFactory taskFactory = new TaskFactory();
List<Task> taskList = new List<Task>();
taskList.Add(taskFactory.StartNew(() => this.Coding("bingle1", "Portal")));
taskList.Add(taskFactory.StartNew(() => this.Coding("bingle2", " DBA ")));
taskList.Add(taskFactory.StartNew(() => this.Coding("bingle3", "Client")));
taskList.Add(taskFactory.StartNew(() => this.Coding("bingle4", "BackService")));
taskList.Add(taskFactory.StartNew(() => this.Coding("bingle5", "Wechat")));
现在要求,谁第一个完成,获得红包奖励(ContinueWhenAny);所有完成后,一起庆祝下(ContinueWhenAll),将其放入一个List<Task>里面去
TaskFactory taskFactory = new TaskFactory();
List<Task> taskList = new List<Task>();
taskList.Add(taskFactory.StartNew(() => this.Coding("bingle1", "Portal")));
taskList.Add(taskFactory.StartNew(() => this.Coding("bingle2", " DBA ")));
taskList.Add(taskFactory.StartNew(() => this.Coding("bingle3", "Client")));
taskList.Add(taskFactory.StartNew(() => this.Coding("bingle4", "BackService")));
taskList.Add(taskFactory.StartNew(() => this.Coding("bingle5", "Wechat")));
//谁第一个完成,获取一个红包奖励
taskFactory.ContinueWhenAny(taskList.ToArray(), t => Console.WriteLine($"XXX开发完成,获取个红包奖励{Thread.CurrentThread.ManagedThreadId.ToString("00")}"));
//项目完成后,一起庆祝一下
taskList.Add(taskFactory.ContinueWhenAll(taskList.ToArray(), rArray => Console.WriteLine($"开发都完成,一起庆祝一下{Thread.CurrentThread.ManagedThreadId.ToString("00")}")));
//阻塞当前线程,等着任意一个任务完成
Task.WaitAny(taskList.ToArray());//也可以限时等待
Console.WriteLine("准备环境开始部署");
//需要能够等待全部线程完成任务再继续 阻塞当前线程,等着全部任务完成
Task.WaitAll(taskList.ToArray());
Console.WriteLine("5个模块全部完成后,集中点评");
Task.WaitAny WaitAll都是阻塞当前线程,等任务完成后执行操作,阻塞卡界面,是为了并发以及顺序控制,网站首页:A数据库 B接口 C分布式服务 D搜索引擎,适合多线程并发,都完成后才能返回给用户,需要等待WaitAll,列表页:核心数据可能来自数据库/接口服务/分布式搜索引擎/缓存,多线程并发请求,哪个先完成就用哪个结果,其他的就不管了。
List<Task> taskList = new List<Task>();
for (int i = 0; i < 10000; i++)
{
int k = i;
if (taskList.Count(t => t.Status != TaskStatus.RanToCompletion) >= 20)
{
Task.WaitAny(taskList.ToArray());
taskL