C#Task创建线程
|
admin
2025年4月21日 18:39
本文热度 1313
|
Task 使得可以以异步方式编写代码,当任务运行时,控制权可以返回给调用线程,以便执行其他操作。Task相当于Thread+ThreadPool。使用Task创建线程方法
1-Task task= new Task(委托),使用task.Start()方法触发
2-Task task= Task.Run(委托)
3-Task task= Task.Factory.StartNew(委托)

案例:分别使用以上三种方法创建多线程
方法1中:会先执行步骤1、再执行步骤3、最后执行步骤2
方法2中:使用Task.WaitAll()方法阻塞调用线程,直到指定的所有任务完成,当所有任务都完成时,代码将继续执行。
方法3中:使用Task.WaitAny()方法阻塞调用线程,直到指定的至少一个任务完成。一旦其中一个任务完成,代码将继续执行。
namespace _017_Task创建线程{ public partial class Task创建线程 : Form { public Task创建线程() { InitializeComponent(); }
private void btNewTask_Click(object sender, EventArgs e) { Task t1 = new Task(() => { MessageBox.Show("步骤1"); Thread.Sleep(3000); MessageBox.Show("步骤2"); }); t1.Start(); MessageBox.Show("步骤3"); }
private void btTaskRun_Click(object sender, EventArgs e) { Task t1 = new Task(() => { MessageBox.Show("步骤1"); Thread.Sleep(3000); MessageBox.Show("步骤2"); }); t1.Start(); Task t2 = Task.Run(() => { MessageBox.Show("步骤10"); Thread.Sleep(6000); MessageBox.Show("步骤20"); }); Task.WaitAll(t2,t1); MessageBox.Show("步骤30"); }
private void btTaskFactory_Click(object sender, EventArgs e) { Task t1 = Task.Factory.StartNew(() => { MessageBox.Show("步骤1"); Thread.Sleep(3000); MessageBox.Show("步骤2"); }); Task t2 = Task.Factory.StartNew(() => { MessageBox.Show("步骤10"); Thread.Sleep(5000); MessageBox.Show("步骤20"); }); Task.WaitAny(t2,t1); MessageBox.Show("步骤3"); } }}
该文章在 2025/4/22 17:40:23 编辑过