솔루션 및 공통 사용 프로젝트 만들기
1. Dinner 이름으로 빈 솔루션을 생성합니다.
프로젝트 형식 |
템플릿 |
이름 |
위치 |
솔루션 |
빈 솔루션 |
Dinner |
C:\C# |
2. Dinner 솔루션에 Dinner.Common 이름으로 .NET Standard 2.0 프로젝트(또는 닷넷 코어 기반 클래스 라이브러리 프로젝트)를 만듭니다. 기본으로 생성된 Class1.cs 파일은 삭제합니다.
3. Dinner.Common 프로젝트에 Cooking.cs 클래스 파일을 만들고, 다음과 같이 코드를 작성합니다.
//Cooking.cs using System; using System.Threading; using System.Threading.Tasks; namespace Dinner.Common { public class Cooking { //동기 방식의 밥 만들기 메서드 public Rice MakeRice() { Console.WriteLine("밥 생성 중..."); Thread.Sleep(1001); return new Rice(); } //비동기 방식의 밥 만들기 메서드 public async Task<Rice> MakeRiceAsync() { Console.WriteLine("밥 생성 중..."); await Task.Delay(1001); return new Rice(); } //동기 방식의 국 만들기 메서드 public Soup MakeSoup() { Console.WriteLine("국 생성 중..."); Thread.Sleep(1001); return new Soup(); } //비동기 방식의 국 만들기 메서드 public async Task<Soup> MakeSoupAsync() { Console.WriteLine("국 생성 중..."); await Task.Delay(1001); return new Soup(); } //동기 방식의 달걀 만들기 메서드 public Egg MakeEgg() { Console.WriteLine("달걀 생성 중..."); Thread.Sleep(1001); return new Egg(); } //비동기 방식의 달걀 만들기 메서드 public async Task<Egg> MakeEggAsync() { Console.WriteLine("달걀 생성 중..."); await Task.Delay(TimeSpan.FromMilliseconds(1001)); return await Task.FromResult<Egg>(new Egg()); } } public class Rice { //Pass } public class Soup { //Pass } public class Egg { //Pass } }
Cooking.cs 파일에는 Cooking, Rice, Soup, Egg 클래스가 있습니다. Cooking, Rice, Egg 클래스는 빈 클래스로 만들고, Cooking 클래스에는 밥 만들기, 국 만들기, 달걀 만들기 등 동기 메서드와 비동기 메서드를 각각 3개씩 구성했습니다.
동기 메서드와 비동기 메서드에서 각각 Thread.Sleep()과 Task.Delay()를 사용하여 1001밀리초 정도 대기하는 코드를 두어 오래 걸리는 시간을 표현했습니다.