Ikkanċella ġirja sħiħa ta' verifika tal-proxy f'WinForms
Żomm sors wieħed ta' kanċellazzjoni għal ġirja ta' verifika tal-proxy f'WinForms, xerred il-kanċellazzjoni fix-xogħol HTTP u waqqaf il-progress tal-lista.
Il-buttuna Ikkanċella għandha twaqqaf il-ġirja. Jekk kull verifika tal-proxy taqbad il-kanċellazzjoni u tirritorna normalment, iċ-ċiklu ta' barra sempliċement jgħaddi għall-proxy li jmiss. Imbagħad l-iskrin jidher bħallikieku Ikkanċella ma għamlet xejn.
F'WinForms .NET modern, żomm sors wieħed bħala qasam tal-formola u ħalli l-kanċellazzjoni tilħaq il-handler tal-avveniment:
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 huwa l-lista ta' URI tal-proxy li l-applikazzjoni diġà pparsjat. Ringieli mill-lista tal-proxy b'xejn jistgħu jitimgħu verifika permessa ta' mira pubblika; żomm il-protokoll u uża biss tipi li dan il-handler jappoġġja. L-UI tistenna kull operazzjoni, għalhekk iċ-ċiklu tal-messaġġi jibqa' ħieles biex jirċievi l-klikk tal-kanċellazzjoni.
Ġib it-token san-netwerk
Il-verifika individwali trid taċċetta dak it-token. Verifika HTTP imqassra tista' tidher hekk:
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 u RecordResult jappartjenu lill-verifikatur eżistenti. Żomm limitu xieraq tad-daqs tar-risposta u timeout għal dan l-endpoint. Verifikatur tal-produzzjoni jista' jerġa' juża klijenti skont ir-rotta; is-silta turi fejn tivvjaġġa l-kanċellazzjoni, mhux disinn ta' pool ta' konnessjonijiet.
Jekk il-proxy li jonqsu għandhom jiġu rreġistrati u maqbuża, aqbad il-fallimenti tan-netwerk mistennija madwar il-verifika individwali. Ħalli l-kanċellazzjoni tal-ġirja taħrab lejn il-handler ta' barra. Għal verifiki paralleli, aqsam it-token tal-ġirja ma' kull ħaddiem u stenna l-kompletament tagħhom qabel ma tippermetti ġirja oħra.