当前位置: 代码迷 >> 综合 >> Task学习笔记
  详细解决方案

Task学习笔记

热度:91   发布时间:2024-02-07 06:25:00.0

1. Task (Task里面的线程是来自于线程池!)

            //Task线程来自线程池ThreadPool.SetMaxThreads(10, 10);List<int> list = new List<int>();List<Task> taskList = new List<Task>();for (int i = 0; i < 20; i++){int k = i;taskList.Add(Task.Run(() =>{list.Add(Thread.CurrentThread.ManagedThreadId);Console.WriteLine($"***k={k} ThreadId={Thread.CurrentThread.ManagedThreadId.ToString("00")} ***");}));}Task.WaitAll(taskList.ToArray());Console.WriteLine($"最大线程数是:{list.Distinct().Count()}");

2. Sleep 和 Delay

Thread.Sleep(2000);   //将当前线程挂起指定的毫秒数。阻塞
Task.Delay(2000);       //创建将在时间延迟后完成的任务。不阻塞

3. WaitAll 和 WaitAny

Task.WaitAll():    等待所有子线程执行完毕后,再往后执行,阻塞主线程(卡顿界面).

Task.WaitAny():  等待任意一个线程执行完毕后,再往后执行,阻塞主线程(卡顿界面).

4. ContinueWhenAll 和 ContinueWhenAny

TaskFactory taskFactory = new TaskFactory();//创建一个延续任务,该任务在一组指定的任务完成后开始。taskFactory.ContinueWhenAll(tasks.ToArray(), a=> { Console.WriteLine("ContinueWhenAll"); }) ; //创建一个延续 System.Threading.Tasks.Task,它将在提供的组中的任何任务完成后马上开始。
taskFactory.ContinueWhenAny(tasks.ToArray(), a=> { Console.WriteLine("ContinueWhenAll"); }) ; 

5.

 

To Be Continue...

 

 

 

 

  相关解决方案