나는 여지껏 주기적인 실행 텀을 구현할때면 Thread.Sleep() 함수를 사용해왔다.
아무래도 프로세스 실행에 있어 지정한 시간만큼 지연을 주는 것이기 때문에
프로세스 진행에 영향을 끼치지않을까하는 생각이 문뜩 나서 찾아보니,
Task.Delay라는 비동기 함수가 있었다.
우선 기능에 대해서부터 말해보자면 -
Thread.Sleep()함수는 동기함수이며, 해당 지정한 ms만큼동안 스레드를 차단하는 함수이다. (blocking)
그래서 비동기 코드에서 해당 함수를 사용하는건 매우 절제해야하는 소스중 하나라고도한다.
이에 반면, Task.Delay()함수는 비동기함수이며, 현재 스레드를 차단하지 않고 논리적 지연을 원할 때 사용하는 함수이다. (non-blocking)
따라서 해당 프로세스가 동기적으로 쓰일지 비동기적으로 쓰일지 고려하고 사용해야한다.
정리하자면 --
Thread.Sleep()은 위의 말대로 동기실행이니까 해당 지정한 ms만큼 아예 쓰레드를 막아버리는 것이고,
Task.Delay()는 해당 함수를 호출한 지점으로 보내서 작동하다가 시간이 되면 다른 스레드를 통해서 해당 함수를 실행시켜주는 기능을 갖고있다.
더 많은 내용들을 보고싶다면 아래의 글을 참고하기바란다.
참고 URL
2. https://gall.dcinside.com/board/view/?id=programming&no=750255
'Programming > C#' 카테고리의 다른 글
C# 접근 제어자 Internal란? (총 정리) (1) | 2021.11.10 |
---|---|
C# 프로퍼티(Property)란? (사용하는 이유 / Java get set) (0) | 2021.11.05 |
C# 소수값 구하기 (0) | 2021.10.12 |
C# Array.ConvertAll 의 편의성 (0) | 2021.09.26 |
C# HashSet<T> 중복제거 (0) | 2021.09.26 |
댓글