跟B站 大V学习C#同步异步多线程

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace YIBUduxiancheng { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //同步的编程问题,一个任务没有执行完,下一段代码不开始 Thread.Sleep(3000); MessageBox.Show("素菜做好了"); Thread.Sleep(5000); MessageBox.Show("荤菜做好了"); //执行这个程序的时候,界面是不能操作,不能拉伸移动,鼠标点击无反应 } private void button2_Click(object sender, EventArgs e) { // //开启两个线程,同时做菜 Thread ts = new Thread(() => { Thread.Sleep(3000); MessageBox.Show("素菜做好了"); } ); ts.Start(); Thread ts2 = new Thread(() => { Thread.Sleep(5000); MessageBox.Show("荤菜做好了"); } ); ts2.Start(); //耗时8秒,但UI界面可以使用,没有锁定 } private void button3_Click(object sender, EventArgs e) { //TASK的底层,也是调用的Thread //TASK和Thread,都使用了委托,参数是一个函数 ; Task.Run(() => { Thread.Sleep(3000); MessageBox.Show("素菜做好了"); Thread.Sleep(5000); MessageBox.Show("荤菜做好了"); }); //耗时是8秒 } private void button4_Click(object sender, EventArgs e) { //同时用两个任务来执行,只有5秒 Task.Run(() => { Thread.Sleep(3000); MessageBox.Show("素菜做好了"); }); Task.Run(() => { Thread.Sleep(5000); MessageBox.Show("荤菜做好了"); }); } private async void button5_Click(object sender, EventArgs e) { await Task.Run(() => { Thread.Sleep(3000); MessageBox.Show("素菜做好了"); }); await Task.Run(() => { Thread.Sleep(5000); MessageBox.Show("荤菜做好了"); }); MessageBox.Show("菜都做好了,开始吃饭!"); //这段程序的问题是,前两个任务还是并行,不是异步。 } private void button6_Click(object sender, EventArgs e) { //完美解决以上问题,用到了”任务列表“; List<Task> ts = new List<Task>(); ts.Add(Task.Run(() => { Thread.Sleep(3000); MessageBox.Show("素菜做好了"); })); ts.Add(Task.Run(() => { Thread.Sleep(5000); MessageBox.Show("荤菜做好了"); } )); //等所有任务执行完了,再执行下边的任务; //ContinueWith里面要有一个类型t,如:t=>{ ,不像上边的可以()=>{ Task.WhenAll(ts).ContinueWith(t=> { MessageBox.Show("菜都做好了,开始吃饭!"); }); } } }
附B站链接:https://www.bilibili.com/video/BV16G4y1c72R/?spm_id_from=333.337.search-card.all.click&vd_source=23d19e6e207acc35deb0fc3a201bf419
活到老,学到老。

浙公网安备 33010602011771号