4.2.3 정적 분석 조절
예제 4-1은 코드 몇 줄에 불과하지만 여전히 너무 장황합니다. 특히 행동 부분은 가독성이 더 좋아야 합니다. 여기에는 다음 두 가지 문제가 있습니다.
1. ConfigureAwait를 호출하는 것은 뭔가 중복되는 것 같습니다.
2. 빈 문자열을 인수로 전달하기 위해 상당히 복잡한 방법을 사용합니다.
각 문제를 차례로 해결해보겠습니다.
ConfigureAwait가 중복된다면 왜 여기에 있을까요? 이 부분이 없다면 코드가 컴파일되지 않기 때문입니다. 새로운 코드베이스를 만들 때 사용하는 체크리스트에 따라 정적 코드 분석을 추가하고, 경고를 오류로 바꾸도록 테스트 프로젝트를 구성했습니다.
정적 코드 분석 규칙9 중 하나로, 호출을 기다리는 태스크에서 ConfigureAwait를 호출할 것을 권장하는 규칙이 있습니다. 해당 규칙 관련 문서에는 규칙이 만들어진 이유가 설명되어 있습니다. 간단히 설명하면, 태스크는 원래 태스크가 생성한 스레드에 의해서만 재개될 수 있지만, ConfigureAwait(false)를 호출하면 어떤 스레드라도 태스크를 재개시킬 수 있게 되면서 교착 상태(deadlock) 및 특정 상황에서의 성능 문제를 피할 수 있습니다. 따라서 재사용이 가능한 라이브러리를 구현하는 코드에서는 이 메서드를 호출해야 한다고 강력히 권장합니다.