WinForms proksi yoxlama qaçışını tamamilə ləğv edin
WinForms proksi yoxlama qaçışı üçün bir ləğvetmə mənbəyi saxlayın, ləğvetməni HTTP işinə ötürün və siyahının irəliləməsini dayandırın.
Ləğv düyməsi qaçışı dayandırmalıdır. Əgər hər proksi yoxlaması ləğvetməni tutub normal qayıdırsa, xarici dövr sadəcə növbəti proksiyə keçir. Onda ekran sanki Ləğv heç nə etməyib kimi görünür.
Müasir .NET WinForms-də bir mənbəni forma sahəsi kimi saxlayın və ləğvetmənin hadisə işləyicisinə çatmasına icazə verin:
private CancellationTokenSource? activeRun;
private async void startButton_Click(object sender, EventArgs e)
{
if (activeRun is not null) return;
using var run = new CancellationTokenSource();
activeRun = run;
startButton.Enabled = false;
try
{
foreach (Uri proxy in configuredProxies)
{
run.Token.ThrowIfCancellationRequested();
await CheckProxyAsync(proxy, run.Token);
}
statusLabel.Text = "Finished";
}
catch (OperationCanceledException) when (run.IsCancellationRequested)
{
statusLabel.Text = "Stopped";
}
finally
{
activeRun = null;
startButton.Enabled = true;
}
}
private void cancelButton_Click(object sender, EventArgs e)
=> activeRun?.Cancel();configuredProxies tətbiqin əvvəlcədən təhlil etdiyi proksi URI siyahısıdır. pulsuz proksi siyahısından sətirlər icazəli ictimai hədəf yoxlamasına qida verə bilər; protokolu saxlayın və yalnız bu işləyicinin dəstəklədiyi növlərdən istifadə edin. UI hər əməliyyatı gözləyir, buna görə mesaj dövrü ləğv klikini qəbul etmək üçün açıq qalır.
Tokeni şəbəkəyə aparın
Fərdi yoxlama bu tokeni qəbul etməlidir. Qısaldılmış HTTP yoxlaması belə görünə bilər:
private async Task CheckProxyAsync(Uri proxy, CancellationToken token)
{
using var handler = new HttpClientHandler
{
Proxy = new System.Net.WebProxy(proxy),
UseProxy = true
};
using var client = new HttpClient(handler);
using var response = await client.GetAsync(
probeUri, HttpCompletionOption.ResponseHeadersRead, token);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync(token);
RecordResult(proxy, body);
}probeUri və RecordResult mövcud yoxlayıcıya aiddir. Bu son nöqtə üçün uyğun cavab ölçüsü həddi və taymaut saxlayın. İstehsalat yoxlayıcısı marşrut üzrə müştəriləri yenidən istifadə edə bilər; fraqment ləğvetmənin hara getdiyini göstərir, əlaqə hovuzu dizaynı deyil.
Uğursuz proksilər qeyd edilməli və atlanmalıdırsa, fərdi yoxlama ətrafında gözlənilən şəbəkə xətalarını tutun. Qaçış ləğvetməsinin xarici işləyiciyə çıxmasına icazə verin. Paralel yoxlamalar üçün qaçış tokenini hər işçi ilə paylaşın və yeni qaçışı aktivləşdirməzdən əvvəl onların tamamlanmasını gözləyin.