Avlýs-knappurin eigur at steðga koyrinum. Um hvør proxy-kanning grípur avlýsingina og kemur rætt aftur, flytur útari lykkjan bara til næsta proxy. Tá sær skíggjin út sum um Avlýs einki gjørdi.

Í nýmóðins .NET WinForms, halt eina keldu sum formreiður og lat avlýsingina ná til hendingarhandteraran:

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 er longu greinaði listin av proxy-URI'um hjá forritinum. Røðir úr ókeypis proxy-listanum kunnu føða eina loyvda kanning av almennum máli; halt protokollina og brúka bara sløg, sum hesin handterarin stuðlar. UI bíðar eftir hvørjari handling, so boðlykkjan verður frí at taka ímóti avlýs-klikki.

Ber tokenið til netið

Einstaka kanningin má taka ímóti tí tokeninum. Ein stytt HTTP-kanning kann líta soleiðis út:

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 og RecordResult hoyra til verandi kennaran. Halt eina hóskandi mark fyri svarstødd og tíðarmark fyri hendan endapunkt. Ein framleiðslukennari kann endurnýta klientar eftir leið; brotið vísir, hvar avlýsingin fer, ikki ein sambandsgrøtuhøgun.

Um miseydnaðar proxy'ar skulu skrásetast og sleppast, gríp tó tær væntaðu netmistøkurnar kring einstøku kanningina. Lat avlýsingina av koyrinum sleppa út til útari handteraran. Fyri samstundis kanningar, deil koyritokeninum við hvønn arbeiðara og bíð eftir, at teir eru lidnir, áðrenn tú loyvir eina aðra koyrslu.

Skyldar greinar