var options = new ParallelOptions
{
    MaxDegreeOfParallelism = 8,
    CancellationToken = cancellationToken
};
await Parallel.ForEachAsync(endpoints, options,
    async (endpoint, token) =>
    {
        var result = await ProbeAsync(endpoint, target, token);
        observations.Add(result);
    });

엔드포인트마다 작업을 하나씩 띄우지 말고 상한이 있는 작업자 풀을 사용합니다. 허용된 공개 대상에 대한 점검에서는 무료 프록시 목록이 후보 행을 제공합니다. 프로브를 구성할 때 각 항목의 프로토콜을 유지하십시오. 이 .NET 스케줄링 조각은 프록시를 인지하는 ProbeAsync과 스레드 안전한 observations 수집기를 전제로 합니다. 여덟은 예시적인 상한이며 측정된 최적값이 아닙니다. 프로브에는 여전히 시도별 제한과 작업 전체 취소가 필요합니다.

완료 순서가 달라도 완료된 결과는 반드시 입력과 함께 보관합니다. 프로토콜, 엔드포인트, 대상, 메서드, 경과 시간, 결과를 기록합니다. 연결 실패, 프록시 로그인 거부, 거부된 CONNECT, 사이트에서 받은 응답은 각각 다른 관측입니다.

TCP 포트가 열린다고 프록시 협상이 증명되지는 않습니다. 프록시 주소를 웹사이트로 가져오는 것도 대상을 요청하는 데 쓰는 것과 다릅니다.

필요한 능력에 맞춰 대상과 메서드를 고릅니다. HEAD는 본문 트래픽을 아낄 수 있지만 GET이 유용한 내용을 반환한다는 것을 증명하지는 않습니다. 사이트가 한쪽을 거부하고 다른 쪽을 허용할 수 있습니다. HTTPS는 평문 HTTP에 없는 CONNECT와 목적지 TLS를 추가합니다. 출구 주소는 설정된 입구와 별개인 목적지 측 관측입니다.

작업을 제한하면 점검기가 경로를 평가하기 전에 자체 소켓, 메모리, 스케줄러를 소진하는 일을 막습니다. 단계별 결과는 성공한 대상 하나가 엔드포인트를 보편적으로 좋게 만든다고 가장하지 않으면서 선택 정책에 계속 유용합니다.

관련 글