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

Dùng một nhóm lao động có giới hạn thay vì khởi chạy một tác vụ cho mỗi điểm cuối. Với các lần kiểm tra nhắm tới mục tiêu công khai được phép, danh sách proxy miễn phí cung cấp các hàng ứng viên; giữ nguyên giao thức của từng mục khi dựng phép thử. Đoạn mã lập lịch .NET này giả định ProbeAsync nhận biết proxy và bộ thu observations an toàn với luồng. Tám là một giới hạn minh họa, không phải giá trị tối ưu đã đo. Phép thử vẫn cần giới hạn cho từng lần thử và việc hủy toàn bộ công việc.

Giữ mọi kết quả đã hoàn tất cùng với đầu vào của nó dù thứ tự hoàn tất có khác nhau. Ghi lại giao thức, điểm cuối, mục tiêu, phương thức, thời gian đã trôi qua và kết cục. Lỗi kết nối, việc bị từ chối đăng nhập proxy, CONNECT bị từ chối và một phản hồi nhận được từ trang web là những quan sát khác nhau.

Một cổng TCP mở không chứng minh việc thương lượng với proxy. Lấy địa chỉ proxy như một trang web cũng khác với dùng nó để yêu cầu mục tiêu.

Chọn mục tiêu và phương thức theo năng lực cần có. HEAD có thể tiết kiệm lưu lượng phần thân nhưng không chứng minh GET trả về nội dung hữu ích; một trang có thể từ chối cách này và cho phép cách kia. HTTPS bổ sung CONNECT và TLS đích vốn không có trong HTTP thường. Địa chỉ thoát là một quan sát khác ở phía đích, tách khỏi cửa vào đã cấu hình.

Công việc có giới hạn giữ cho trình kiểm tra không cạn kiệt socket, bộ nhớ hay bộ lập lịch của chính nó trước khi có thể đánh giá tuyến. Kết quả theo từng bước vẫn hữu ích cho chính sách lựa chọn mà không giả vờ rằng một đích thành công khiến một điểm cuối tốt một cách phổ quát.

Bài viết liên quan