Thread多线程开发
private void button2_Click(object sender,EventArgs e)
{
// Thread里面传入方法或者委托
Thread t = new Thread(()=>
{
Thread.Sleep(3000);
MessageBox.Show("素菜做好了","友情提示");
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了","友情提示");
});
t.Start();
}
Task多线程
private void button2_Click(object sender,EventArgs e)
{
Task.Run(()=>
{
Thread.Sleep(3000);
MessageBox.Show("素菜做好了","友情提示");
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了","友情提示");
});
}
await异步线程
等待线程做完后再执行接下来的步骤,但是ui线程不受影响
private async void button2_Click(object sender,EventArgs e)
{
await Task.Run(()=>
{
Thread.Sleep(3000);
MessageBox.Show("素菜做好了","友情提示");
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了","友情提示");
});
MessageBox.Show("菜都做好了,大家快来吃饭!","提示");
}
await异步线程不能同步进行
执行的时候还是一步步来走的
private void button2_Click(object sender,EventArgs e)
{
Task.Run(()=>
{
Thread.Sleep(3000);
MessageBox.Show("素菜做好了","友情提示");
});
Task.Run(()=>
{
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了","友情提示");
});
MessageBox.Show("菜都做好了,大家快来吃饭!","提示");
}
解决方法
private void button2_Click(object sender,EventArgs e)
{
List<task> ts = new List<Task>();
ts.Add(Task.Run(()=>
{
Thread.Sleep(3000);
MessageBox.Show("素菜做好了","友情提示");
}));
ts.Add(Task.Run(()=>
{
Thread.Sleep(5000);
MessageBox.Show("荤菜做好了","友情提示");
}));
//当list里所有线程都结束时就会执行接下来的步骤
Task.WhenAll(ts).ContinueWith(t =>
{
MessageBox.Show("菜都做好了,大家快来吃饭!","提示");
});
}
多线程与异步编程:从Thread到Task和await,
这篇文章展示了如何使用Thread创建线程,Task实现异步操作,以及如何利用await关键字等待异步任务完成。通过示例代码,解释了在UI线程中如何避免阻塞,以及如何管理多个并发任务的完成情况。
3235

被折叠的 条评论
为什么被折叠?



