多线程项目实例
1、Task使用启动方式
static void Method1() { Task task1 = new Task(() => { //在这里写要具体干的事 Console.WriteLine($"Task1开启的线程ID={Thread.CurrentThread.ManagedThreadId}"); }); task1.Start();//适合线程开启和执行是分开的情况 Console.WriteLine("----------------------"); Console.Read(); }
static void Method2() { Task task1 = Task.Run(() => { //在这里写要具体干的事 Console.WriteLine($"Task1开启的线程ID={Thread.CurrentThread.ManagedThreadId}"); }); Console.WriteLine("----------------------"); Console.Read(); }
static void Method3() { Task task1 = Task.Factory.StartNew(() => { //在这里写要具体干的事 Console.WriteLine($"Task1开启的线程ID={Thread.CurrentThread.ManagedThreadId}"); }); Console.WriteLine("----------------------"); Console.Read(); }
2、Task使用阻塞方式和任务延续
static void Method4() { Task task1 = new Task(() => { //在这里写要具体干的事 Thread.Sleep(1000); Console.WriteLine($"Task1开启的线程ID={Thread.CurrentThread.ManagedThreadId}{DateTime.Now.ToLongTimeString()}"); }); task1.Start(); Task task2 = new Task(() => { //在这里写要具体干的事 Thread.Sleep(3000); Console.WriteLine($"Task2开启的线程ID={Thread.CurrentThread.ManagedThreadId}{DateTime.Now.ToLongTimeString()}"); }); task2.Start(); //逐个等待 执行顺序:task1->task2->mainTask //task1.Wait(); //task2.Wait(); //换一个方式和上述方式一致 //Task.WaitAll(task1, task2); //第三种方式 Task.WaitAny(task1, task2); //执行顺序: task1->mainTask->task2 Console.WriteLine("----------------------"); Console.Read(); }