Task、async/await
Task 是什么?
Task = 任务(相当于一个线程要做的事)可以理解成:交给后台去做的一件工作
2. async 是什么?
async = 标记这个方法是异步方法告诉程序:这个方法里有等待、有后台任务
3. await 是什么?
await = 等待后台任务完成,但不卡界面、不卡程序最关键:等待时,程序还能继续响应!
————————————————————————————————————————————————————————————————————————
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
Console.WriteLine("开始");
GetValueAsync();
Console.WriteLine("主线程不卡顿");
Console.ReadKey();
}
// 异步方法,返回 int
static async Task GetValueAsync()
{
// 等待后台任务完成,并获取结果
int result = await CalcAsync();
Console.WriteLine("计算结果:" + result);
}
// 后台计算任务
static Task<int> CalcAsync()
{
return Task.Run(() =>
{
return 100; // 返回结果
});
}
}
这里的Task.Run相当于new Thread(DoWork).Start();
开启一个后台线程去干活
——————————————————————————————————————————————————————————
using System;
using System.Threading.Tasks; // 必须引用
using System.Threading;
class Program
{
// 程序入口
static void Main(string[] args)
{
// ====================== 执行顺序 1 ======================
Console.WriteLine("1 主线程开始");
// 调用异步方法
TestAsync();
// ====================== 执行顺序 2 ======================
Console.WriteLine("4 主线程继续做别的事,不卡顿");
Console.ReadKey();
}
// 异步方法(必须加 async)
static async Task TestAsync()
{
// ====================== 执行顺序 3 ======================
Console.WriteLine("2 进入异步方法");
// ====================== 执行顺序 4 ======================
// 等待 2 秒,但不卡主线程!
await Task.Delay(2000);
// ====================== 执行顺序 5 ======================
Console.WriteLine("3 后台任务完成");
}
}

浙公网安备 33010602011771号