Inkinobho ethi Khansela kufanele imise umgijimo. Uma ukuhlola proxy ngakunye kubamba ukukhansela futhi kubuyela ngokujwayelekile, iluphu yangaphandle ivele idlulele ku-proxy elandelayo. Ngaleso sikhathi isikrini sibukeka sengathi uKhansela akenzanga lutho.

Ku-.NET WinForms yesimanje, gcina umthombo owodwa njengenkambu yefomu futhi uvumele ukukhansela ukufike kumphathi womcimbi:

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 uhlu lwama-URI e-proxy osekuhlaziywe yitohle app. Imigqa evela ohleni lwama-proxy amahhala ingondla ukuhlolwa komgomo womphakathi okuvunyelwe; gcina iphrothokholi futhi usebenzise kuphela izinhlobo ezisekelwa yilo mphathi. I-UI ilinda ukusebenza ngakunye, ngakho iluphu yemiyalezo ihlala ikhululekile ukwamukela ukuchofoza kukaKhansela.

Yisa ithokheni kunethiwekhi

Ukuhlola ngakunye kufanele kwamukele leyo thokheni. Ukuhlola kwe-HTTP okufushanisiwe kungabukeka kanje:

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 ne-RecordResult kungokomhloli okhona. Gcina umkhawulo ofanele wosayizi wempendulo nesikhathi sokulinda sale ndawo yokugcina. Umhloli wokukhiqiza angaphinda asebenzise amaklayenti ngomzila; ucezu lukhombisa lapho ukukhansela kuhamba khona, hhayi umklamo wedamu lokuxhumana.

Uma ama-proxy ahlulekile kufanele abhalwe futhi ehlulwe, bamba ukwehluleka kwenethiwekhi okulindelekile eduze kokuhlola ngakunye. Vumela ukukhansela komgijimo kuphume kumphathi wangaphandle. Ekuhloleni okuhambisanayo, yabelana ngethokheni yomgijimo nawo wonke umsebenzi futhi ulinde ukuqedwa kwawo ngaphambi kokuvumela omunye umgijimo.

Izihloko ezihlobene