.NET

Async/await 및 패턴

async/await, Task, ValueTask, ConfigureAwait, cancellation token, 병렬 실행, deadlock

26 면접 질문·
Senior
1

비동기 메서드에서 'await' 키워드의 주요 역할은 무엇입니까?

답변

await 키워드는 Task가 완료될 때까지 비동기 메서드의 실행을 일시 중단하는 동시에 호출 thread를 해제하여 다른 작업을 처리할 수 있게 합니다. 이를 통해 thread 차단을 방지하고 애플리케이션의 확장성을 향상시킵니다. thread를 차단하는 Task.Wait()나 Task.Result와 달리 await는 thread pool 리소스를 효율적으로 사용할 수 있게 합니다.

2

이벤트 핸들러를 제외하고 async void를 피해야 하는 이유는 무엇입니까?

답변

async void 메서드는 await할 수 없으며 내부에서 발생한 예외는 호출 코드에서 잡을 수 없어 애플리케이션 충돌을 일으킵니다. 또한 await할 Task가 없기 때문에 async void 메서드를 단위 테스트하는 것은 불가능합니다. 이벤트 핸들러는 framework에 의해 호출되며 Task를 반환할 수 없기 때문에 예외입니다.

3

어떤 사용 사례에서 Task<T>보다 ValueTask<T>를 선호해야 합니까?

답변

ValueTask는 value type으로, cache처럼 결과가 이미 동기적으로 사용 가능할 때 heap 할당을 피합니다. 이를 통해 고성능 시나리오에서 garbage collector 부담을 줄입니다. Task는 결과가 동기적이더라도 항상 heap에 할당됩니다. 잘못 사용하면 성능이 저하될 수 있으므로 성능 향상이 측정 가능할 때만 ValueTask를 사용하세요.

4

Task<T>와 비교하여 ValueTask<T>에 적용되는 중요한 제약은 무엇입니까?

5

.NET 라이브러리에서 ConfigureAwait(false)의 주요 목적은 무엇입니까?

+23 면접 질문

다음 면접을 위해 .NET을 마스터하세요

모든 질문, flashcards, 기술 테스트, 코드 리뷰 연습, 면접 시뮬레이터에 접근하세요.

무료로 시작하기