业务需求说明:
现在我需要做早餐,实现烤面包,烤培根,搞点番茄酱,开吃这几个步骤,烤面包和考培根为了节省时间可以同时操作,然后等这两个做完在搞点番茄酱就可以开饭了。
异步,多任务怎么实现呢
下面通过使用 async/await、WhenAll、ContinueWith 来讲解
class Program { static async Task Main(string[] args) { Console.WriteLine("开始做早餐--------"); //烤面包 Task toast = Toast(); //烤培根 Task bakedBacon = BakedBacon(); //等待这两个任务完成之后搞点番茄酱就可以开吃了。 await Task.WhenAll(toast, bakedBacon).ContinueWith(async (t) => { await AddSauce(); Console.WriteLine("开吃"); }); } }
烤面包异步方法
/// <summary> /// 开始烤面包 /// </summary> /// <returns></returns> public static async Task Toast() { await Task.Run(async () => { Console.WriteLine("正在烤面包!"); await Task.Delay(4000); Console.WriteLine("结束烤面包!"); }); }
烤培根异步方法
/// <summary> /// 烤培根 /// </summary> /// <returns></returns> public static async Task BakedBacon() { await Task.Run(async () => { Console.WriteLine("正在烤培根!"); await Task.Delay(2000); Console.WriteLine("结束烤培根!"); }); }
搞点番茄酱异步方法
/// <summary> /// 番茄酱 /// </summary> /// <returns></returns> public static async Task AddSauce() { await Task.Run(async () => { Console.WriteLine("来点番茄酱!"); await Task.Delay(1000); Console.WriteLine("番茄酱搞定!"); }); }
运行结果: