wait.all和when.all

 

var data = new List<Student1> {
                new Student1 {Id=1,Name="a"},
                new Student1 {Id=2,Name="b"},
                new Student1 {Id=3,Name="c"},
                new Student1 {Id=4,Name="d"},
                new Student1 {Id=5,Name="e"},
                new Student1 {Id=6,Name="f"},
                new Student1 {Id=7,Name="g"},
                new Student1 {Id=8,Name="l"},
                new Student1 {Id=9,Name="m"}
            };
            Random rd = new Random();
            List<int> ns = new List<int>();
            List<Task> taskList = new List<Task>();
            foreach (var d in data)
            {
                int n = rd.Next(1,5);
                Console.WriteLine(n.ToString());
                taskList.Add(Task.Run<int>(() =>
                {
                    Thread.Sleep(1000 * n);
                    ns.Add(n);
                    Console.WriteLine("Task.Run" + d.Id.ToString() + "-" + d.Name + "-time:" + n.ToString() + ":" + Thread.CurrentThread.ManagedThreadId.ToString());
                    return n;
                }));
            }
           
            Console.WriteLine("Task开始");
            Task.WaitAll(taskList.ToArray());
            //Task.WhenAll(taskList.ToArray()).ContinueWith(t =>
            //{
            //    Console.WriteLine("Task.....");
            //});
            Console.WriteLine("Task结束");
            //Thread.Sleep(1000*30);

1、WaitAll会阻塞当前线程,知道所有任务完成

2、WhenAll开启新线程判断所有任务是否完成,ContinueWith所有任务完成后执行

posted @ 2018-05-23 08:56  wjl910  阅读(270)  评论(0)    收藏  举报