C#Task创建线程
|
admin
2025年4月21日 18:39
本文热度 109
|
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 编辑过