using System.Collections.Generic;
using System.Threading.Tasks;
internal class Coffee { }
static async Task Main(string[] args)
Coffee cup = PourCoffee();
Console.WriteLine("coffee is ready");
var eggsTask = FryEggsAsync(2);
var baconTask = FryBaconAsync(3);
var toastTask = MakeToastWithButterAndJamAsync(2);
var eggs = await eggsTask;
Console.WriteLine("eggs are ready");
var bacon = await baconTask;
Console.WriteLine("bacon is ready");
var toast = await toastTask;
Console.WriteLine("toast is ready");
Console.WriteLine("oj is ready");
Console.WriteLine("Breakfast is ready!");
static async Task<Toast> MakeToastWithButterAndJamAsync(int number)
var toast = await ToastBreadAsync(number);
private static Juice PourOJ()
Console.WriteLine("Pouring orange juice");
private static void ApplyJam(Toast toast) =>
Console.WriteLine("Putting jam on the toast");
private static void ApplyButter(Toast toast) =>
Console.WriteLine("Putting butter on the toast");
private static async Task<Toast> ToastBreadAsync(int slices)
for (int slice = 0; slice < slices; slice++)
Console.WriteLine("Putting a slice of bread in the toaster");
Console.WriteLine("Start toasting...");
Console.WriteLine("Remove toast from toaster");
private static async Task<Bacon> FryBaconAsync(int slices)
Console.WriteLine($"putting {slices} slices of bacon in the pan");
Console.WriteLine("cooking first side of bacon...");
for (int slice = 0; slice < slices; slice++)
Console.WriteLine("flipping a slice of bacon");
Console.WriteLine("cooking the second side of bacon...");
Console.WriteLine("Put bacon on plate");
private static async Task<Egg> FryEggsAsync(int howMany)
Console.WriteLine("Warming the egg pan...");
Console.WriteLine($"cracking {howMany} eggs");
Console.WriteLine("cooking the eggs ...");
Console.WriteLine("Put eggs on plate");
private static Coffee PourCoffee()
Console.WriteLine("Pouring coffee");