Task
使得可以以異步方式編寫(xiě)代碼,當(dāng)任務(wù)運(yùn)行時(shí),控制權(quán)可以返回給調(diào)用線程,以便執(zhí)行其他操作。Task相當(dāng)于Thread+ThreadPool。使用Task創(chuàng)建線程方法
1-Task task= new Task(委托),使用task.Start()方法觸發(fā)
2-Task task= Task.Run(委托)
3-Task task= Task.Factory.StartNew(委托)

案例:分別使用以上三種方法創(chuàng)建多線程
方法1中:會(huì)先執(zhí)行步驟1、再執(zhí)行步驟3、最后執(zhí)行步驟2
方法2中:使用Task.WaitAll()方法阻塞調(diào)用線程,直到指定的所有任務(wù)完成,當(dāng)所有任務(wù)都完成時(shí),代碼將繼續(xù)執(zhí)行。
方法3中:使用Task.WaitAny()方法阻塞調(diào)用線程,直到指定的至少一個(gè)任務(wù)完成。一旦其中一個(gè)任務(wù)完成,代碼將繼續(xù)執(zhí)行。
namespace _017_Task創(chuàng)建線程
{
public partial class Task創(chuàng)建線程 : Form
{
public Task創(chuàng)建線程()
{
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 編輯過(guò)