HTTP프로토콜 사용 시 Request 후 Response를 받는 시간을 고려하지 않으면 문제가 발생할 수 있습니다.
Request를 보내는 함수가 Blocking 방식으로 작동한다면 N초 만큼 태스크가 정지될 수 있습니다.
우리가 호출하는 Rest API도 서버가 돌아가고 있는 것이고,
해당 Rest API 서버도 충분히 다운이 되거나 장애가 발생할 수 있습니다.
이런 상황까지 고려해서 HTTP Client Timeout에 대한 세팅을 하고 예외 처리를 해줘야 합니다.
정리하면
위 예시와 같은 상황에 default Timeout 시간 값만큼 Blocking 될 수 있씁니다.
string url = "https://velog.io/";
string request = "request message";
var content = new StringContent(request, System.Text.Encoding.UTF8, "text/plain");
// Timeout를 설정해주는 코드
httpClient.Timeout = TimeSpan.FromSeconds(3);
var response = await httpClient.PostAsync(address, content);
Timeout을 설정하는 코드는 상당히 심플합니다.
httpClient.Timeout = TimeSpan.FromSeconds(3);
위 한 줄만 추가하면 됩니다.
HttpClient가 정의된 곳을 보면 위와 같이 TimeSpan으로 Get/Set을 하는 것을 알 수 있습니다.
주석에도 적혀 있듯이 클라이언트가 서버로부터 응답을 기다리는 최대 시간을 설정합니다.
(여기서 클라이언트는 API 서버로 Request를 보내는 측을 말합니다.)
내부 코드를 좀 더 뜯어보면 C#에서는 디폴트 TimeOut은 100초(약 1분 40초)입니다.
TimeOut을 설정하지 않으면 진행 중인 테스크에 100초 정도의 Blocking이 발생하게 됩니다.