본문 바로가기
젬스it

Task.Delay() vs Thread.Sleep() — C#에서의 대기 처리 차이점

by 젬스컬쳐 캐리커처 2025. 9. 24.
반응형

🔄 Task.Delay() vs Thread.Sleep() — C#에서의 대기 처리 차이점

C#에서 일정 시간 동안 작업을 지연시키고 싶을 때 흔히 사용하는 두 가지 방법이 있습니다: `Task.Delay()`와 `Thread.Sleep()`. 둘 다 “기다린다”는 목적은 같지만, 내부 동작 방식과 사용되는 문맥은 완전히 다릅니다.

이 글에서는 두 메서드의 차이점과 언제 어떤 것을 사용해야 하는지 명확하게 설명합니다.

---

🧠 핵심 차이점 요약
[비교 항목]                | Task.Delay()                                    | Thread.Sleep()
-------------------|----------------------------------|-------------------------------
동작 방식                   | 비동기 (Async)                                 | 동기 (Blocking)
스레드 점유 여부        | 스레드를 점유하지 않음                      | 현재 스레드를 블로킹함
사용 시점                   | async/await 문맥에서 사용               | 일반적인 동기 코드에서 사용
CPU 자원 효율성      | 효율적 (자원 절약)                              | 비효율적 (자원 낭비 가능)
예시 사용법               | await Task.Delay(1000);                 | Thread.Sleep(1000);




---

🔍 상세 설명

✅ Task.Delay()

• 비동기적으로 지정된 시간만큼 기다립니다.
• 스레드를 블로킹하지 않기 때문에 다른 작업과 병렬로 실행될 수 있습니다.
• UI 애플리케이션이나 웹 서버에서 응답성을 유지하는 데 유리합니다.
• 예시:await Task.Delay(2000); // 2초 대기 (비동기)



❌ Thread.Sleep()

• 현재 스레드를 강제로 멈추게 합니다.
• 해당 시간 동안 아무 작업도 하지 못하고 CPU 자원을 낭비할 수 있습니다.
• 테스트 코드나 간단한 콘솔 앱에서 사용되지만, UI나 서버 환경에서는 피하는 것이 좋습니다.
• 예시:Thread.Sleep(2000); // 2초 대기 (동기)



---

🧩 언제 어떤 걸 써야 할까?

• UI 앱 / 웹 서버 / 비동기 작업 → `Task.Delay()` 사용
• 간단한 테스트 / 콘솔 앱 / 동기 흐름 → `Thread.Sleep()` 사용 가능하지만 주의 필요


---

이제 `Task.Delay()`와 `Thread.Sleep()`의 차이를 명확히 이해하고, 상황에 맞는 적절한 선택을 할 수 있을 거예요. 궁금한 점이나 더 깊은 내용이 필요하다면 댓글로 남겨주세요!


반응형