async/await
不阻塞主线程:遇到耗时操作(如下载文件、读数据库),程序不会卡死,UI界面依然可以滑动或点击。
代码像同步一样好读:不用写一堆复杂的回调函数,代码依然可以自上而下顺序阅读。
————————————————————————————————————————————————————————————————————————————————————
// 模拟一个耗时2秒的任务
async Task DoWorkAsync()
{
Console.WriteLine("开始工作...");
await Task.Delay(2000); // 暂停2秒,但不卡死程序
Console.WriteLine("工作完成!");
}
————————————————————————————————————————————————————————————————————————————————————
// 异步获取一个数字
async Task
{
await Task.Delay(1000); // 模拟耗时
return 100; // 返回结果
}
// 调用并获取结果
int num = await GetNumberAsync();
Console.WriteLine(num); // 输出 100
————————————————————————————————————————————————————————————————————————————————————
// 按钮点击事件必须是 async void
private async void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false; // 禁用按钮防连点
await Task.Delay(3000); // 模拟耗时下载
MessageBox.Show("下载完成!"); // 自动回到UI线程弹窗
button1.Enabled = true;
}

浙公网安备 33010602011771号