Atcelt visu WinForms starpniekservera pārbaudes palaišanu
Turiet vienu atcelšanas avotu WinForms starpniekservera pārbaudes palaišanai, pārvietojiet atcelšanu caur HTTP darbu un apturiet saraksta virzību.
Poga Atcelt ir jāaptur palaišana. Ja katra starpniekservera pārbaude uztver atcelšanu un atgriežas normāli, ārējā cilpa vienkārši pāriet uz nākamo starpniekserveri. Tad ekrāns izskatās tā, it kā Atcelt neko nebūtu izdarījis.
Mūsdienu .NET WinForms turiet vienu avotu kā formas lauku un ļaujiet atcelšanai sasniegt notikuma apdarinātāju:
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 ir jau parsētais lietotnes starpniekservera URI saraksts. Rindas no bezmaksas starpniekserveru saraksta var barot atļautu publiska mērķa pārbaudi; saglabājiet protokolu un izmantojiet tikai šī apdarinātāja atbalstītos tipus. UI gaida katru darbību, tāpēc ziņojumu cilpa paliek brīva atcelšanas klikšķa saņemšanai.
Pārnest pilnvaru uz tīklu
Atsevišķai pārbaudei ir jāpieņem šī pilnvara. Saīsināta HTTP pārbaude var izskatīties šādi:
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 un RecordResult pieder esošajam pārbaudītājam. Saglabājiet atbilstošu atbildes lieluma ierobežojumu un noildzi šim galapunktam. Ražošanas pārbaudītājs var atkārtoti izmantot klientus maršruta ietvaros; fragments parāda, kur ceļo atcelšana, nevis savienojumu pūla dizainu.
Ja neizdevušies starpniekserveri ir jāieraksta un jāizlaiž, pārtveriet sagaidāmās tīkla kļūdas ap atsevišķo pārbaudi. Ļaujiet palaišanas atcelšanai izkļūt uz ārējo apdarinātāju. Paralēlām pārbaudēm kopīgojiet palaišanas pilnvaru ar katru darbinieku un pirms citas palaišanas iespējošanas nogaidiet to pabeigšanu.