1.wait
using System; using System.Threading; using System.Threading.Tasks; namespace 多线程_List { class Program { static void Main(string[] args) { //Task中的延续和7种阻塞 //阻塞 wait 有点像thread的join 作用是Task执行完 这个wait之后的代码才可以执行 Task t1 = new Task(()=> { Thread.Sleep(1000); Console.WriteLine("我是wait"); }); t1.Start(); t1.Wait(); Console.WriteLine("我是主线程"); Console.ReadKey(); } } }
2.WaitAll
using System; using System.Threading; using System.Threading.Tasks; namespace 多线程_List { class Program { static void Main(string[] args) { //Task中的延续和7种阻塞 Task t1 = new Task(()=> { Thread.Sleep(1000); Console.WriteLine("我是wait1"); }); t1.Start(); Task t2 = new Task(() => { Thread.Sleep(200); Console.WriteLine("我是wait2"); }); t2.Start(); Task.WaitAll(t1, t2); Console.WriteLine("我是主线程"); Console.ReadKey(); } } }
先输出 我是wait2 再输出 我是wait1 最后输出 我是主线程
3.WaitAny
using System; using System.Threading; using System.Threading.Tasks; namespace 多线程_List { class Program { static void Main(string[] args) { //Task中的延续和7种阻塞 Task t1 = new Task(()=> { Thread.Sleep(1000); Console.WriteLine("我是wait1"); }); t1.Start(); Task t2 = new Task(() => { Thread.Sleep(200); Console.WriteLine("我是wait2"); }); t2.Start(); Task.WaitAny(t1, t2); Console.WriteLine("我是主线程"); Console.ReadKey(); } } }
先输出 我是wait2 再输出 我是主线程 最后输出 我是wait1
4 whenAll +延续
using System; using System.Threading; using System.Threading.Tasks; namespace 多线程_List { class Program { static void Main(string[] args) { //Task中的延续和7种阻塞 Task t1 = new Task(()=> { Thread.Sleep(1000); Console.WriteLine("我是wait1"); }); t1.Start(); Task t2 = new Task(() => { Thread.Sleep(200); Console.WriteLine("我是wait2"); }); t2.Start(); Task.WhenAll(t2, t1).ContinueWith(t3=> { Console.WriteLine("我是t3,一个新的线程"); }); Console.WriteLine("我是主线程"); Console.ReadKey(); } } }
我是主线程
我是wait2
我是wait1
我是t3,一个新的线程
5 whenAny +延续
using System; using System.Threading; using System.Threading.Tasks; namespace 多线程_List { class Program { static void Main(string[] args) { //Task中的延续和7种阻塞 Task t1 = new Task(()=> { Thread.Sleep(1000); Console.WriteLine("我是wait1"); }); t1.Start(); Task t2 = new Task(() => { Thread.Sleep(200); Console.WriteLine("我是wait2"); }); t2.Start(); //跟上一个代码的区别是 上一个是whenAll 这个是whenAny Task.WhenAny(t2, t1).ContinueWith(t3=> { Console.WriteLine("我是t3,一个新的线程"); }); Console.WriteLine("我是主线程"); Console.ReadKey(); } } }
我是主线程
我是wait2
我是t3,一个新的线程
我是wait1
6 Task.Factory的whenAll阻塞和延续
using System; using System.Threading; using System.Threading.Tasks; namespace 多线程_List { class Program { static void Main(string[] args) { //Task中的延续和7种阻塞 Task t1 = new Task(()=> { Thread.Sleep(1000); Console.WriteLine("我是wait1"); }); t1.Start(); Task t2 = new Task(() => { Thread.Sleep(200); Console.WriteLine("我是wait2"); }); t2.Start(); //注意的是 这里是factory 上面两个线程也要start Task.Factory.ContinueWhenAll(new Task[2] { t1, t2 }, t => { Console.WriteLine("factory 中的when All"); }); Console.WriteLine("我是主线程"); Console.ReadKey(); } } }
我是主线程
我是wait2
我是wait1
factory 中的when All
7 Task.Factory的whenAny阻塞和延续
using System; using System.Threading; using System.Threading.Tasks; namespace 多线程_List { class Program { static void Main(string[] args) { //Task中的延续和7种阻塞 Task t1 = new Task(()=> { Thread.Sleep(1000); Console.WriteLine("我是wait1"); }); t1.Start(); Task t2 = new Task(() => { Thread.Sleep(200); Console.WriteLine("我是wait2"); }); t2.Start(); //注意的是 这里是factory 上面两个线程也要start Task.Factory.ContinueWhenAny(new Task[2] { t1, t2 }, t => { Console.WriteLine("factory 中的when Any"); }); Console.WriteLine("我是主线程"); Console.ReadKey(); } } }
我是主线程
我是wait2
factory 中的when Any
我是wait1
原文地址:https://www.cnblogs.com/wholeworld/p/10193385.html
时间: 2024-11-10 01:21:44