static void Main(string[] args)
{
PrepareAsync().Wait();
Console.WriteLine("准备工作完成,可以泡茶了~~~");
Console.ReadLine();
return;
}
private static async Task PrepareAsync()
{
Task<string> heatupWaterTask = HeatupWater();//异步执行此代码
Task<string> washCupTask = WashCup(3);//异步执行此代码
await washCupTask; //使用 await, 阻塞当前线程,等待 washCupTask 任务完成后才会继续执行后面代码
Task<string> fillTeaTask = FillTea(3);//异步执行此代码
if (!heatupWaterTask.IsCompleted)
Console.WriteLine("水还没烧开,玩会手机~~~");
Task.WaitAll(heatupWaterTask, washCupTask, fillTeaTask);//阻塞当前线程,等待所有异步TASK都完成后返回
}
private static async Task<string> WashCup(int n)
{
try
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始洗杯子 x {n}");
await Task.Delay(1000 * n);
return $"wash {n} cup";
}
finally
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束洗杯子");
}
}
private static async Task<string> FillTea(int n)
{
try
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始往杯子里放茶叶 x {n}");
await Task.Delay(1000 * n);
return $"fill tea";
}
finally
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束放茶叶");
}
}
private static async Task<string> HeatupWater()
{
try
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始烧水");
await Task.Delay(1000 * 10);
return $"HeatupWater";
}
finally
{
Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束烧水");
}
}
运行结果: