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

Gunakan kumpulan pekerja terbatas alih-alih menjalankan satu tugas untuk setiap titik akhir. Untuk pemeriksaan terhadap target publik yang diizinkan, daftar proxy gratis menyediakan baris kandidat; pertahankan protokol setiap entri saat menyusun probe. Fragmen penjadwalan .NET ini mengasumsikan ProbeAsync yang sadar proxy dan pengumpul observations yang aman untuk thread. Delapan adalah batas ilustratif, bukan nilai optimum terukur. Probe tetap memerlukan batas per percobaan dan pembatalan seluruh pekerjaan.

Simpan setiap hasil yang selesai bersama masukannya meskipun urutan penyelesaian berbeda. Catat protokol, titik akhir, target, metode, waktu tempuh, dan hasil. Kegagalan koneksi, penolakan login proxy, CONNECT yang ditolak, dan respons situs yang diterima adalah pengamatan yang berbeda.

Terbukanya port TCP tidak membuktikan negosiasi proxy. Mengambil alamat proxy sebagai situs web juga berbeda dari memakainya untuk meminta target.

Pilih target dan metode sesuai kemampuan yang dibutuhkan. HEAD dapat menghemat lalu lintas badan tetapi tidak membuktikan GET mengembalikan konten berguna; sebuah situs dapat menolak yang satu dan mengizinkan yang lain. HTTPS menambahkan CONNECT dan TLS tujuan yang tidak ada pada HTTP biasa. Alamat keluar adalah pengamatan lain di sisi tujuan, terpisah dari pintu masuk yang dikonfigurasi.

Pekerjaan terbatas mencegah pemeriksa menghabiskan soket, memori, atau penjadwalnya sendiri sebelum dapat menilai rute. Hasil bertahap tetap berguna bagi kebijakan pemilihan tanpa berpura-pura bahwa satu tujuan yang berhasil membuat titik akhir baik secara universal.

Artikel terkait