Zrušenie celého behu kontroly proxy vo WinForms
Pre beh kontroly proxy vo WinForms udržujte jeden zdroj zrušenia, prenášajte zrušenie do HTTP práce a zastavte posun zoznamu.
Tlačidlo Zrušiť má beh zastaviť. Ak každá kontrola proxy zachytí zrušenie a vráti sa normálne, vonkajšia slučka jednoducho prejde na ďalšie proxy. Obrazovka potom vyzerá, akoby Zrušiť nič neurobilo.
V modernom .NET WinForms udržujte jeden zdroj ako pole formulára a nechajte zrušenie dôjsť do obslužnej rutiny udalosti:
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 je aplikáciou už naparsovaný zoznam URI proxy. Riadky z zoznamu bezplatných proxy môžu napájať povolenú kontrolu verejného cieľa; zachovajte protokol a používajte iba typy, ktoré táto obsluha podporuje. UI čaká na každú operáciu, takže slučka správ zostáva voľná na prijatie kliknutia na zrušenie.
Preneste token do siete
Individuálna kontrola musí tento token prijať. Skrátená HTTP kontrola môže vyzerať takto:
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 a RecordResult patria existujúcemu kontrolórovi. Udržujte primeraný limit veľkosti odpovede a časový limit pre tento koncový bod. Produkčný kontrolór môže znova používať klientov podľa trasy; úryvok ukazuje, kadiaľ zrušenie putuje, nie návrh poolu pripojení.
Ak majú byť neúspešné proxy zaznamenané a preskočené, zachyťte očakávané sieťové chyby okolo individuálnej kontroly. Nechajte zrušenie behu uniknúť do vonkajšej obsluhy. Pri paralelných kontrolách zdieľajte token behu so všetkými pracovníkmi a pred povolením ďalšieho behu počkajte na ich dokončenie.