HTTP 요청이 계속되는 동안 스톱워치는 기다리기를 멈출 수 있습니다. 프록시를 통한 시도에 의도된 예산이 있다면 작업 자체에 취소를 제공하세요.

프록시로 구성된 HttpClient가 이미 있는 최신 .NET 애플리케이션의 경우:

using var budget = new CancellationTokenSource(TimeSpan.FromSeconds(5));
using var response = await client.GetAsync(
    targetUrl,
    HttpCompletionOption.ResponseHeadersRead,
    budget.Token);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync(budget.Token);

같은 예산이 준비 전에 시작되어 본문을 읽는 동안에도 활성 상태로 유지됩니다. ResponseHeadersRead는 헤더 이후에 제어를 반환하므로 HttpClient 자체의 완료 타임아웃만으로는 이후 본문 읽기 예산이 정의되지 않습니다.

취소를 HTTP 상태 및 전송 오류와 구분하세요. OperationCanceledException은 제공된 토큰에서 또는 다른 구성된 타임아웃에서 발생할 수 있습니다. 모든 실패를 죽은 프록시로 보고하지 말고 해당 취소 소스를 확인하세요.

이 프록시 경로를 소유한 클라이언트를 재사용하세요. 시도를 취소한다고 해서 이후 모든 요청마다 전체 연결 풀을 다시 만들어야 하는 것은 아닙니다.

이 예시는 유한한 응답 본문을 버퍼링합니다. 스트리밍 다운로드는 토큰을 스트림 복사 루프에 전달하고 모든 종료 경로에서 응답을 해제해야 합니다.

취소는 작업 정책을 표현하는 것이지 모든 기반 플랫폼 동작에 대한 정확한 실시간 약속이 아닙니다. Task.IsCompleted에 대한 끝없는 폴링 루프로 대체하지 마세요.

관련 글