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 編輯過