Maɓallin Soke ya kamata ya dakatar da gudanarwar. Idan kowane binciken wakili ya kama sokewar kuma ya dawo daidai, madauki na waje zai wuce zuwa wakili na gaba kawai. Sa'an nan allon ya zama kamar Soke bai yi komai ba.

A cikin .NET WinForms na zamani, riƙe tushe ɗaya a matsayin filin fom kuma bar sokewar ta isa mai sarrafa abin da ya faru:

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 ita ce jerin URI na wakili da aikace-aikacen ya riga ya tantance. Layuka daga jerin wakilai na kyauta na iya ciyar da binciken da aka yarda na manufa ta jama'a; riƙe ka'idar kuma yi amfani da nau'ikan da wannan mai sarrafa ke goyan bayansu kawai. UI tana jiran kowane aiki, don haka madaukin saƙo ya kasance a buɗe don karɓar danna Soke.

Kawo alamar zuwa cibiyar sadarwa

Binciken ɗaya ɗaya dole ya karɓi wannan alamar. Taƙaitaccen binciken HTTP zai iya kama da wannan:

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 da RecordResult na mai binciken da ke akwai ne. Riƙe iyakar girman amsa da ya dace da lokacin ƙarewa don wannan ƙarshen. Mai binciken samarwa zai iya sake amfani da abokan ciniki ta hanya; guntun yana nuna inda sokewar ke tafiya, ba ƙirar tafkin haɗi ba.

Idan za a rubuta wakilan da suka gaza kuma a tsallake su, kama kurakuran cibiyar sadarwa da ake tsammani a kusa da binciken ɗaya. Bar sokewar gudanarwa ta tsere zuwa mai sarrafa na waje. Don binciken layi ɗaya, raba alamar gudanarwa ga kowane ma'aikaci kuma jira kammalarsu kafin kunna wani gudanarwa.

Labarai masu alaƙa