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 дадае CONNECT і TLS пункту прызначэння, якіх няма ў звычайным HTTP. Адрас выхаду — іншае назіранне з боку прызначэння, асобнае ад наладжанага ўваходу.

Абмежаваная праца не дазваляе правяральніку вычарпаць свае сокеты, памяць або планавальнік перш чым ацаніць маршрут. Паэтапны вынік застаецца карысным для палітыкі выбару, не робячы выгляду, што адзін паспяховы пункт прызначэння робіць кропку ўваходу добрай ва ўсіх выпадках.

Падобныя артыкулы