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 dan bukannya melancarkan satu tugas untuk setiap titik akhir. Untuk pemeriksaan terhadap sasaran awam yang dibenarkan, senarai proksi percuma menyediakan baris calon; kekalkan protokol setiap entri semasa membina prob. Coretan penjadualan .NET ini menganggap ProbeAsync yang sedar proksi dan pengumpul observations yang selamat untuk benang. Lapan ialah had ilustratif, bukan nilai optimum yang diukur. Prob masih memerlukan had setiap percubaan dan pembatalan keseluruhan tugas.

Simpan setiap hasil selesai bersama inputnya walaupun urutan penyiapan berbeza. Rekodkan protokol, titik akhir, sasaran, kaedah, masa berlalu dan hasil. Kegagalan sambungan, penolakan log masuk proksi, CONNECT yang ditolak dan respons tapak yang diterima ialah pemerhatian yang berbeza.

Port TCP terbuka tidak membuktikan rundingan proksi. Mengambil alamat proksi sebagai tapak web juga berbeza daripada menggunakannya untuk meminta sasaran.

Pilih sasaran dan kaedah mengikut keupayaan yang diperlukan. HEAD boleh menjimatkan trafik badan tetapi tidak membuktikan GET memulangkan kandungan berguna; tapak boleh menolak satu dan membenarkan yang lain. HTTPS menambah CONNECT dan TLS destinasi yang tiada dalam HTTP biasa. Alamat keluar ialah pemerhatian lain di pihak destinasi, berasingan daripada pintu masuk yang dikonfigurasi.

Kerja terbatas menghalang pemeriksa daripada menghabiskan soket, memori atau penjadualnya sendiri sebelum dapat menilai laluan. Hasil berperingkat kekal berguna kepada dasar pemilihan tanpa berpura-pura bahawa satu destinasi berjaya menjadikan titik akhir baik secara universal.

Artikel berkaitan