ਰੱਦ ਕਰੋ ਬਟਨ ਨੂੰ ਰਨ ਰੋਕਣਾ ਚਾਹੀਦਾ ਹੈ। ਜੇ ਹਰ ਪ੍ਰੌਕਸੀ ਜਾਂਚ ਰੱਦ ਕਰਨਾ ਫੜ ਕੇ ਆਮ ਤਰੀਕੇ ਨਾਲ ਵਾਪਸ ਆਉਂਦੀ ਹੈ, ਤਾਂ ਬਾਹਰੀ ਲੂਪ ਅਗਲੇ ਪ੍ਰੌਕਸੀ ਵੱਲ ਚਲੀ ਜਾਂਦੀ ਹੈ। ਫਿਰ ਸਕ੍ਰੀਨ ਇੰਝ ਦਿਖਦੀ ਹੈ ਜਿਵੇਂ ਰੱਦ ਕਰੋ ਨੇ ਕੁਝ ਨਹੀਂ ਕੀਤਾ।

ਆਧੁਨਿਕ .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 ਮੌਜੂਦਾ ਜਾਂਚਕਰਤਾ ਦੇ ਹਨ। ਇਸ ਐਂਡਪੌਇੰਟ ਲਈ ਢੁਕਵੀਂ ਜਵਾਬ-ਆਕਾਰ ਸੀਮਾ ਅਤੇ ਸਮਾਂ ਸੀਮਾ ਰੱਖੋ। ਉਤਪਾਦਨ ਜਾਂਚਕਰਤਾ ਰਸਤੇ ਅਨੁਸਾਰ ਕਲਾਇੰਟ ਦੁਬਾਰਾ ਵਰਤ ਸਕਦਾ ਹੈ; ਟੁਕੜਾ ਦਿਖਾਉਂਦਾ ਹੈ ਕਿ ਰੱਦ ਕਿੱਥੇ ਜਾਂਦਾ ਹੈ, ਕਨੈਕਸ਼ਨ-ਪੂਲ ਡਿਜ਼ਾਈਨ ਨਹੀਂ।

ਜੇ ਅਸਫਲ ਪ੍ਰੌਕਸੀ ਨੂੰ ਰਿਕਾਰਡ ਕਰਕੇ ਛੱਡਣਾ ਹੈ, ਤਾਂ ਵਿਅਕਤੀਗਤ ਜਾਂਚ ਦੇ ਆਸਪਾਸ ਉਮੀਦ ਕੀਤੀਆਂ ਨੈੱਟਵਰਕ ਅਸਫਲਤਾਵਾਂ ਫੜੋ। ਰਨ ਰੱਦ ਕਰਨ ਨੂੰ ਬਾਹਰੀ ਹੈਂਡਲਰ ਤੱਕ ਨਿਕਲਣ ਦਿਓ। ਸਮਾਨਾਂਤਰ ਜਾਂਚਾਂ ਲਈ, ਰਨ ਟੋਕਨ ਹਰ ਕਰਮਚਾਰੀ ਨਾਲ ਸਾਂਝਾ ਕਰੋ ਅਤੇ ਦੂਜਾ ਰਨ ਚਾਲੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਨ੍ਹਾਂ ਦੇ ਪੂਰਾ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰੋ।

ਸੰਬੰਧਿਤ ਲੇਖ