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 жөнөкөй HTTP-де жок CONNECT жана максаттык TLS кошот. Чыгуу дареги — конфигурацияланган кирүүдөн бөлүнгөн, максат тараптагы дагы бир байкоо.

Чектелген иш текшерүүчүгө маршрутту баалоого чейин өзүнүн сокеттерин, эстутумун же пландаштыргычын бүтүрүүгө жол бербейт. Этаптуу натыйжа бир ийгиликтүү максат акыркы чекитти бардык жерде жакшы кылат деп көрсөтпөстөн, тандоо саясаты үчүн пайдалуу бойдон калат.

Тектеш макалалар