using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HelloWorld
{
class Cook
{
//생성자
public Cook()
{
Console.WriteLine("요리사가 생성되었습니다.");
}
public async Task Work() //비동기 메서드
{
Coffee coffee = this.PourCoffee();
Console.WriteLine("커피 완료");
Task<Egg> eggsTask = this.FryEggsAsync(2);
Egg eggs = await eggsTask;
Console.WriteLine("후라이 완료");
Task<Bacon> baconTask = this.FryBaconAsync(2);
Bacon bacon = await baconTask;
Console.WriteLine("베이컨 완료");
//Task<Toast> toastTask = this.ToastBreadAsync();
//Toast toast = await toastTask;
//Task<Toast> toastTask = this.ToastBreadAsync();
//Toast toast = await toastTask;
Task<Toast> makeToastTask = this.MakeToastWithButterAndJamAsync();
Toast toast = await makeToastTask;
Console.WriteLine("토스트가 준비 되었습니다.");
Console.WriteLine("토스트 완료");
Juice juice = PourJuice();
Console.WriteLine("주스 완료");
Console.WriteLine("아침 준비완료");
}
public Coffee PourCoffee()
{
Console.WriteLine("커피를 따릅니다.");
//커피 반환
return new Coffee();
}
public async Task<Egg> FryEggsAsync(int howMany)
{
Console.WriteLine("팬을 데웁니다.");
//3초 기다렸다가
await Task.Delay(3000);
Console.WriteLine("{0}개의 달걀을 깨트립니다.", howMany);
Console.WriteLine("계란후라이중...");
//3초 기다렸다가
await Task.Delay(3000);
Console.WriteLine("접시에 담습니다.");
//계란후라이 반환
return new Egg();
}
async Task<Bacon> FryBaconAsync(int slices)
{
Console.WriteLine("{0}개의 베이컨들을 팬에 올려놓는다", slices);
Console.WriteLine("앞면을 굽는다");
//3초 있다가 뒷면을 굽는다
await Task.Delay(3000);
Console.WriteLine("뒤집어서 뒷면을 굽는다");
//3초 있다가 접시에 놓는다
await Task.Delay(3000);
Console.WriteLine("베이컨을 접시에 올렸습니다.");
//새로운 베이컨이 나온다
return new Bacon();
}
async Task<Toast> MakeToastWithButterAndJamAsync()
{
//빵을 토스트기에 넣고 나오면 버터 바르고 잼 바른다
Toast toast = await ToastBreadAsync();
this.ApplyButter(toast);
this.ApplyJam(toast);
return toast;
}
void ApplyJam(Toast toast)
{
Console.WriteLine("{0}에 잼을 바른다.", toast);
}
void ApplyButter(Toast toast)
{
Console.WriteLine("{0}에 버터를 바른다.", toast);
}
//람다 사용
//void ApplyJam(Toast toast) => Console.WriteLine("{0}에 잼을 바른다.", toast);
async Task<Toast> ToastBreadAsync()
{
Console.WriteLine("빵을 토스트기에 넣는다.");
//3초 대기한다
await Task.Delay(3000);
Console.WriteLine("빵을 토스트기에서 꺼낸다.");
return new Toast();
}
private Juice PourJuice()
{
Console.WriteLine("오렌지주스를 따른다");
return new Juice();
}
}
}
C#/수업 내용