WinForms proxy-egiaztapen exekuzio osoa bertan behera utzi
Mantendu bertan behera uzteko iturri bakarra WinForms proxy-egiaztapen exekuzio baterako, hedatu bertan behera uztea HTTP lanean eta gelditu zerrendaren aurrerapena.
Bertan behera utzi botoiak exekuzioa gelditu behar du. Proxy-egiaztapen bakoitzak bertan behera uztea harrapatu eta normaltasunez itzultzen bada, kanpoko begizta hurrengo proxira pasatzen da besterik gabe. Orduan pantailak bertan behera utzik ezer egin ez balu bezala ematen du.
.NET WinForms modernoan, mantendu iturri bakarra formulario-eremu gisa eta utzi bertan behera uzteari gertaera-kudeatzailera iristen:
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 aplikazioak lehendik analizatutako proxy URI zerrenda da. Proxy zerrenda doakoako errenkadek helburu publiko baten egiaztapen baimendua elikatu dezakete; mantendu protokoloa eta erabili kudeatzaile honek onartzen dituen motak soilik. UIak eragiketa bakoitzaren zain egoten da, beraz mezu-begizta libre geratzen da bertan behera uzteko klik-a jasotzeko.
Eraman tokena sarera
Egiaztapen indibidualak token hori onartu behar du. HTTP egiaztapen laburtu batek itxura hau izan dezake:
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 eta RecordResult lehendik dagoen egiaztatzailearenak dira. Mantendu erantzun-tamainaren muga egokia eta denbora-muga amaiera-puntu horretarako. Ekoizpen-egiaztatzaile batek bezeroak ibilbidearen arabera berrerabili ditzake; zatikiak bertan behera uztea norantz doan erakusten du, ez konexio-poolen diseinua.
Proxy hutsegiteak erregistratu eta saltatu behar badira, harrapatu sareko hutsegite esperoak egiaztapen indibidualaren inguruan. Utzi exekuzioaren bertan behera uztea kanpoko kudeatzailera ihes egiten. Egiaztapen paraleloetarako, partekatu exekuzio-tokena langile bakoitzarekin eta itxaron haien amaiera beste exekuzio bat gaitzeko.