Hætta við hnappurinn á að stöðva keyrsluna. Ef hver staðgengilsprófun grípur uppsögnina og snýr aftur eðlilega, færist ytri lykkjan einfaldlega á næsta staðgengil. Þá lítur skjárinn út eins og Hætta við hafi ekkert gert.

Í nútíma .NET WinForms skaltu halda einni heimild sem formreit og láta uppsögnina ná til atburðarhandtakans:

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 þegar þáttaði listi forritsins yfir staðgengils-URI. Línur úr ókeypis staðgengilslista geta fætt leyfða prófun á opinberu marki; haltu siðareglunni og notaðu aðeins gerðir sem þessi handtaki styður. Viðmótið bíður hverrar aðgerðar, svo skilaboðalykkjan helst frjáls til að taka við uppsagnarsmellinum.

Berðu táknið til netkerfisins

Einstaka prófunin verður að samþykkja þetta tákn. Stytt HTTP-prófun getur litið svona ú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 tilheyra fyrirliggjandi prófunartæki. Haltu hæfilegri mörkum á svarstærð og tímamörkum fyrir þennan endapunkt. Framleiðsluprófari getur endurnýtt biðla eftir leið; brotið sýnir hvert uppsögnin fer, ekki hönnun tengingasafns.

Ef misteknar staðgengils eru skráðar og sleppt, gríptu væntanleg netkerfisvillur í kringum einstöku prófunina. Láttu uppsögn keyrslunnar sleppa til ytri handtakans. Fyrir samhliða prófanir skaltu deila keyrslutákninu með hverjum starfsmanni og bíða eftir að þeim ljúki áður en önnur keyrsla er virkjuð.

Tengdir greinar