internal class Program { //비동기 Task 코드가 실행되는 메서드는 async 접두사 및 리턴형이 Task 이어야 함. private static async Task Main(string[] args) { var cls = new AClass(); cls.ComplexCalc(3000); // 동기처리 cls.ComplexCalc(2000); // 동기처리 await cls.ComplexCalcAsync(3000); // 비동기 처리 var task1 = Task.Run(() => cls.ComplexCalc(3000)); var task2 = Task.Run(() => cls.ComplexCalc(2000)); Task[] tasks = { task1, task2 }; //먼저완료되는 타스크를 먼저처리 var anytask = Task.WhenAny(tasks); Task finTask = await anytask; var result = await finTask; //모두가 완료되기를 기다리는 타스크. Task alltask = Task.WhenAll(tasks); await alltask; } } public class AClass { public int ComplexCalc(int complexity) { Thread.Sleep(complexity); return complexity; } public async Task ComplexCalcAsync(int complexity) { var task = Task.Run(() => ComplexCalc(complexity)); // await 가 나오기 전까지 다른 동시작업 가능 var result = await task; return result; } }