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

Uporabite omejen nabor delavcev, namesto da bi zagnali ločeno opravilo za vsako končno točko. Pri preverjanjih dovoljenih javnih ciljev brezplačni seznam proxyjev ponuja kandidatne vrstice; pri sestavljanju sonde ohranite protokol vsakega vnosa. Ta odlomek načrtovanja .NET predpostavlja ProbeAsync, ki pozna proxy, in zbiralnik observations, varen za niti. Osem je ponazoritvena meja, ne izmerjen optimum. Sonda še vedno potrebuje omejitve na poskus in preklic celotnega opravila.

Vsak dokončan rezultat shranite skupaj z njegovim vnosom, tudi ko je vrstni red dokončanja drugačen. Zabeležite protokol, končno točko, cilj, metodo, pretečeni čas in izid. Neuspeh povezave, zavrnitev prijave pri proxyju, zavrnjen CONNECT in prejeti odgovor spletnega mesta so različna opažanja.

Odprta vrata TCP ne dokazujejo pogajanja s proxyjem. Pridobitev naslova proxyja kot spletnega mesta se prav tako razlikuje od njegove uporabe za zahtevo do cilja.

Cilj in metodo izberite glede na zahtevano zmožnost. HEAD lahko prihrani promet telesa, a ne dokaže, da GET vrača uporabno vsebino; spletno mesto lahko eno zavrne in drugo dovoli. HTTPS doda CONNECT in TLS cilja, ki ju v preprostem HTTP ni. Izhodni naslov je še eno opažanje na strani cilja, ločeno od nastavljenega vhoda.

Omejeno delo prepreči preverjevalniku, da bi pred oceno poti izčrpal lastne vtičnice, pomnilnik ali razporejevalnik. Stopnjevani rezultat ostaja koristen za politiko izbire, ne da bi se pretvarjal, da en uspešen cilj naredi končno točko univerzalno dobro.

Sorodni članki