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

Fes servir un grup de treballadors limitat en lloc d'iniciar una tasca per a cada extrem. Per a les comprovacions contra objectius públics permesos, la llista gratuïta de proxys proporciona files candidates; conserva el protocol de cada entrada en construir la prova. Aquest fragment de planificació .NET pressuposa un ProbeAsync conscient del proxy i un recopilador observations segur per a fils. Vuit és un límit il·lustratiu, no un òptim mesurat. La prova encara necessita límits per intent i cancel·lació de tota la feina.

Conserva cada resultat complet amb la seva entrada encara que l'ordre de finalització sigui diferent. Registra protocol, extrem, objectiu, mètode, temps transcorregut i resultat. L'error de connexió, el rebuig de l'inici de sessió al proxy, un CONNECT denegat i una resposta rebuda del lloc són observacions diferents.

Que s'obri un port TCP no demostra la negociació amb el proxy. Obtenir l'adreça del proxy com si fos un lloc web també és diferent d'usar-la per sol·licitar l'objectiu.

Tria l'objectiu i el mètode segons la capacitat requerida. HEAD pot estalviar trànsit de cos, però no demostra que GET retorni contingut útil; un lloc pot rebutjar-ne un i permetre l'altre. HTTPS afegeix CONNECT i TLS de destí que no existeixen en HTTP simple. L'adreça de sortida és una altra observació del costat de la destinació, separada de l'entrada configurada.

La feina limitada evita que el comprovador esgoti els seus propis sockets, memòria o planificador abans de poder avaluar la ruta. Un resultat per etapes continua sent útil per a la política de selecció sense fingir que una destinació reeixida fa que un extrem sigui bo universalment.

Articles relacionats