task是开启一个新的线程去做你需要做的事情,后面的代码会直接运行,这样可以防止线程阻塞
private void button1_Click(object sender, EventArgs e)
{
Task.Run(()=> {
Thread.Sleep(5000);
Invoke(new Action(()=> {
label1.Text = "123";
}));
});
label2.Text = "456";//标签一5秒后内容变成123,标签二内容立刻变成456
}
Task.WaitAll(),Task.WaitAny() 等待所有/任意一个线程完成后继续下面的代码
Task.WhenAll().ContinueWith(),Task.WhenAny().ContinueWith() 主线程不等待,当完成所有/任意一个线程后继续执行
async、await也可以防止线程阻,不过可以实现等待await后面的代码执行完成后再执行后面的代码
public async Task<string> getData()
{
await Task.Delay(5000);
return "123";
}
private async void button2_Click(object sender, EventArgs e)
{
label1.Text = await getData();
label2.Text = "456";//标签一5秒后内容变成123,标签二5秒后内容变成456
}