Չեղարկել ամբողջ 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-ը պատկանում են գոյություն ունեցող ստուգիչին։ Պահեք պատասխանի չափի համապատասխան սահման և ժամկետ այս վերջնակետի համար։ Արտադրական ստուգիչը կարող է վերօգտագործել հաճախորդներ ըստ երթուղու. հատվածը ցույց է տալիս, թե ուր է գնում չեղարկումը, ոչ թե միացումների լողավազանի ձևավորում։
Եթե ձախողված պրոքսիները պետք է գրանցվեն և բաց թողնվեն, բռնեք սպասվող ցանցային խափանումները առանձին ստուգման շուրջ։ Թողեք աշխատանքի չեղարկումը դուրս գա արտաքին մշակիչ։ Զուգահեռ ստուգումների համար կիսեք աշխատանքի տոկենը յուրաքանչյուր աշխատողի հետ և սպասեք նրանց ավարտին նախքան մեկ այլ աշխատանք միացնելը։