47 lines
1.2 KiB
C#
47 lines
1.2 KiB
C#
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<int>.Run(() => cls.ComplexCalc(3000));
|
|
var task2 = Task<int>.Run(() => cls.ComplexCalc(2000));
|
|
Task<int>[] tasks = { task1, task2 };
|
|
|
|
//먼저완료되는 타스크를 먼저처리
|
|
var anytask = Task.WhenAny(tasks);
|
|
Task<int> 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<int> ComplexCalcAsync(int complexity)
|
|
{
|
|
var task = Task.Run(() => ComplexCalc(complexity));
|
|
// await 가 나오기 전까지 다른 동시작업 가능
|
|
|
|
var result = await task;
|
|
return result;
|
|
}
|
|
|
|
} |