Programming/C#

C# Thread.Sleep() vs Task.Delay() 함수의 차이

JeongKyun 2021. 10. 18.
반응형

나는 여지껏 주기적인 실행 텀을 구현할때면 Thread.Sleep() 함수를 사용해왔다.

 

아무래도 프로세스 실행에 있어 지정한 시간만큼 지연을 주는 것이기 때문에

 

프로세스 진행에 영향을 끼치지않을까하는 생각이 문뜩 나서 찾아보니,

 

Task.Delay라는 비동기 함수가 있었다.

 

우선 기능에 대해서부터 말해보자면 - 

 

Thread.Sleep()함수는 동기함수이며, 해당 지정한 ms만큼동안 스레드를 차단하는 함수이다. (blocking)

 

그래서 비동기 코드에서 해당 함수를 사용하는건 매우 절제해야하는 소스중 하나라고도한다.

 

이에 반면, Task.Delay()함수는 비동기함수이며, 현재 스레드를 차단하지 않고 논리적 지연을 원할 때 사용하는 함수이다. (non-blocking)

 

따라서 해당 프로세스가 동기적으로 쓰일지 비동기적으로 쓰일지 고려하고 사용해야한다.

 

정리하자면 --

 

Thread.Sleep()은 위의 말대로 동기실행이니까 해당 지정한 ms만큼 아예 쓰레드를 막아버리는 것이고,

 

Task.Delay()는 해당 함수를 호출한 지점으로 보내서 작동하다가 시간이 되면 다른 스레드를 통해서 해당 함수를 실행시켜주는 기능을 갖고있다.

 

더 많은 내용들을 보고싶다면 아래의 글을 참고하기바란다.

 

참고 URL

1.  http://daplus.net/c-task-delay-%EC%82%AC%EC%9A%A9%EC%8B%9C%EA%B8%B0-thread-sleep-%EC%82%AC%EC%9A%A9%EC%8B%9C%EA%B8%B0/

 

[C#] Task.Delay 사용시기, Thread.Sleep 사용시기 - 리뷰나라

Task.Delay 와 Thread.Sleep 을 사용할 때 좋은 규칙이 있습니까? 구체적으로, 하나가 다른 것보다 효과적이고 효율적일 수 있도록하는 최소값이 있습니까? 마지막으로 Task.Delay로 인해 비동기 / 대기 상

daplus.net

 

2. https://gall.dcinside.com/board/view/?id=programming&no=750255 

 

Thread.Sleep과 Task.Delay 설명 자세히 해봤어(수정) - 프로그래밍

자 일단 소스코드는 이거야. 굳이 Sleep test하는데 웬 Task.Run? 할테지만 일단 한번 끝까지 봐바.내가 말하는 내용을 모두 이해 한다면 Task.Run을 사용한 이유도 이해가 될꺼야일단 각자 method

gall.dcinside.com

 

댓글

💲 많이 본 글