async 함수를 이용 할 때 흔히들 실수 하는 부분, 또는 async void를 이용 했을 때 문제점에 대해서 설명을 할려고 한다.
흔히 C#에서 async문을 이용 할 때 async void를 이용할지, async Task 를 이용할지에 대해서 많은 의구심이 들고 각각 무슨 차이점이 있는지.
async와 Task에서는 어떤 상관 관계가 있어서 async vs Thraed 같은 문구가 많이 보이는지에 생각을 많이 했을수 있다.
해당 내용에서는 간단하게 async void나 async Task를 사용 했을 때 흔히 실수 하는 문제점에 대하여 설명을 한다.
static async void foo(int index)
{
while (true)
{
Console.WriteLine(index);
await Task.Delay(1000);
}
}
여기서 보이는 내용이라면
asnyc를 사용 했고, 무한 루프를 돌면서 1초에 1번씩 출력을 하도록 하였다.
해당 코드는 아무런 문제가 없어보이고, foo란 함수를 호출을 하면 "비동기"로 1초에 1번씩 호출을 하여 "index" 란 숫자를 출력한다.
static void Main(string[] args)
{
for (int i = 0; ; i++)
{
foo(i);
Task.Delay(1000).Wait();
}
}
하지만 Main 함수에서 foo란 함수가 N번, 즉 여러번 호출이 된다면 이야기가 달라진다.
foo란 함수는 "비동기"로 돌기 때문에 Main 함수 입장에서는 foo() 란 함수를 호출만 하고 바로
Task.Delay(1000).Wait() 란 함수를 호출하게 된다.
그러니까 Main 입장에서는 foo는 async이므로 호출만 하고 다음 함수를 호출 한다.
결과는 이처럼 나오나. 다르게 나올 수 있다.
'차장님의 이야기' 카테고리의 다른 글
Visual Studio For Mac의 WinForm 프로젝트 관련 문제 (0) | 2020.05.18 |
---|---|
C# 다양한 Delay 함수와 Delay 함수를 만들어 보기. (1) | 2020.05.16 |
회전행렬 증명 #3 (0) | 2020.05.15 |
회전 행렬 증명 #2 (0) | 2020.05.15 |
회전 행렬의 증명 #1 (0) | 2020.05.14 |