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);
    });

Koristite ograničen pul radnika umjesto pokretanja zasebnog zadatka za svaku krajnju tačku. Za provjere prema dozvoljenim javnim ciljevima besplatna lista proxyja daje redove kandidata; pri izgradnji sonde sačuvajte protokol svakog unosa. Ovaj .NET fragment zakazivanja pretpostavlja ProbeAsync koji poznaje proxy i kolektor observations siguran za niti. Osam je ilustrativna granica, a ne izmjereni optimum. Sonda i dalje treba ograničenja po pokušaju i otkazivanje cijelog posla.

Čuvajte svaki završeni rezultat uz njegov ulaz čak i kada se redoslijed završetka razlikuje. Bilježite protokol, krajnju tačku, cilj, metod, proteklo vrijeme i ishod. Neuspjeh veze, odbijanje proxy prijave, odbijeni CONNECT i primljeni odgovor lokacije različita su zapažanja.

Otvoren TCP port ne dokazuje pregovaranje s proxyjem. Dohvatanje adrese proxyja kao web lokacije također se razlikuje od korištenja iste za zahtjev prema cilju.

Odaberite cilj i metod prema traženoj mogućnosti. HEAD može uštedjeti promet tijela, ali ne dokazuje da GET vraća koristan sadržaj; lokacija može odbiti jedno i dozvoliti drugo. HTTPS dodaje CONNECT i TLS odredišta kojih nema u običnom HTTP-u. Adresa izlaza je još jedno zapažanje na strani odredišta, odvojeno od konfigurisanog ulaza.

Ograničen rad sprječava provjerivača da iscrpi vlastite sockete, memoriju ili raspoređivač prije nego što procijeni rutu. Etapni rezultat ostaje koristan za politiku odabira bez pretvaranja da jedna uspješna destinacija čini krajnju tačku univerzalno dobrom.

Povezani članci