Kontroli liston de prokuriloj kun limigita samtemo
Limigu samtemplajn kontrolojn de prokuriloj kaj registru, kion ĉiu kontrolo fakte pruvis por la cela retejo.
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);
});Uzu limigitan laborantaron anstataŭ lanĉi apartan taskon por ĉiu finpunkto. Por kontroloj kontraŭ permesitaj publikaj celoj, la senpaga listo de prokuriloj liveras kandidatajn vicojn; konservu la protokolon de ĉiu ero kiam vi konstruas la sondon. Ĉi tiu .NET-planiga fragmento supozas ProbeAsync konscian pri prokurilo kaj faden-sekuran kolektanton observations. Ok estas ilustra limo, ne mezurita optimumo. La sondo ankoraŭ bezonas limojn por ĉiu provo kaj nuligon de la tuta laboro.
Konservu ĉiun finitan rezulton kune kun sia enigo eĉ kiam la ordo de finiĝo malsamas. Registru protokolon, finpunkton, celon, metodon, pasintan tempon kaj rezulton. Konekta fiasko, rifuzo de prokurila ensaluto, rifuzita CONNECT kaj ricevita respondo de retejo estas malsamaj observoj.
Malfermita TCP-pordo ne pruvas intertraktadon kun prokurilo. Elpreni la prokurilan adreson kiel retejon ankaŭ diferencas de uzi ĝin por peti la celon.
Elektu la celon kaj metodon laŭ la bezonata kapablo. HEAD povas ŝpari korpan trafikon sed ne pruvas, ke GET redonas utilan enhavon; retejo povas rifuzi unu kaj permesi la alian. HTTPS aldonas CONNECT kaj celan TLS, kiuj mankas en simpla HTTP. Elira adreso estas alia observo ĉe la cela flanko, aparta de la agordita eniro.
Limigita laboro malebligas al la kontrolilo elĉerpi siajn proprajn ingojn, memoron aŭ planilon antaŭ ol ĝi povas taksi la vojon. Etapa rezulto restas utila por la elekta politiko sen ŝajnigi, ke unu sukcesa celo igas finpunkton universale bona.