WinForms прокси-тексеруінің бүкіл жүгірісін болдырмау
WinForms прокси-тексеру жүгірісі үшін бір болдырмау көзін ұстаңыз, болдырмауды HTTP жұмысына таратыңыз және тізімнің ілгерілеуін тоқтатыңыз.
Болдырмау түймесі жүгірісті тоқтатуы керек. Егер әрбір прокси тексеруі болдырмауды ұстап, қалыпты түрде қайтса, сыртқы цикл келесі проксиге көшеді. Сонда экран болдырмау ештеңе істемегендей көрінеді.
Заманауи .NET WinForms-те бір көзді форма өрісі ретінде ұстаңыз және болдырмаудың оқиға өңдеушісіне жетуіне жол беріңіз:
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 — қолданба бұрын талдаған прокси URI тізімі. Тегін прокси тізімінен алынған жолдар рұқсат етілген жалпы мақсатты тексеруді қоректендіре алады; протоколды сақтаңыз және осы өңдеуші қолдайтын түрлерді ғана пайдаланыңыз. UI әр операцияны күтеді, сондықтан хабарлама циклі болдырмау басуын қабылдау үшін бос қалады.
Токенді желіге жеткізіңіз
Жеке тексеру сол токенді қабылдауы керек. Қысқартылған HTTP тексеруі былай көрінуі мүмкін:
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 және RecordResult қолданыстағы тексерушіге тиесілі. Бұл соңғы нүкте үшін жауап өлшемінің лайықты шегін және уақыт шегін ұстаңыз. Өндірістік тексеруші клиенттерді маршрут бойынша қайта пайдалана алады; үзінді болдырмаудың қайда жүретінін көрсетеді, қосылым пулының дизайнын емес.
Егер сәтсіз проксилер жазылып, өткізіліп жіберілуі керек болса, жеке тексерудің айналасында күтілетін желілік ақауларды ұстаңыз. Жүгіріс болдырмауы сыртқы өңдеушіге шығуына жол беріңіз. Параллель тексерулер үшін жүгіріс токенін әр жұмысшымен бөлісіңіз және басқа жүгірісті қосу алдында олардың аяқталуын күтіңіз.