റദ്ദാക്കുക ബട്ടൺ റൺ നിർത്തണം. ഓരോ പ്രോക്സി പരിശോധനയും റദ്ദാക്കൽ പിടിച്ച് സാധാരണയായി മടങ്ങിയാൽ, പുറം ലൂപ്പ് അടുത്ത പ്രോക്സിയിലേക്ക് പോകും. അപ്പോൾ റദ്ദാക്കുക ഒന്നും ചെയ്യാത്തതുപോലെ സ്ക്രീൻ കാണപ്പെടും.

ആധുനിക .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 എന്നിവ നിലവിലുള്ള പരിശോധനയുടെ ഭാഗമാണ്. ഈ എൻഡ്പോയിന്റിന് ഉചിതമായ പ്രതികരണ വലുപ്പ പരിധിയും സമയപരിധിയും സൂക്ഷിക്കുക. പ്രൊഡക്ഷൻ പരിശോധന റൂട്ട് അനുസരിച്ച് ക്ലയന്റുകൾ വീണ്ടും ഉപയോഗിക്കാം; ഈ ഭാഗം റദ്ദാക്കൽ എവിടെയാണ് സഞ്ചരിക്കുന്നതെന്ന് കാണിക്കുന്നു, കണക്ഷൻ പൂൾ രൂപകൽപ്പനയല്ല.

പരാജയപ്പെട്ട പ്രോക്സികൾ രേഖപ്പെടുത്തി ഒഴിവാക്കണമെങ്കിൽ, വ്യക്തിഗത പരിശോധനയ്ക്ക് ചുറ്റും പ്രതീക്ഷിക്കുന്ന നെറ്റ്വർക്ക് പരാജയങ്ങൾ പിടിക്കുക. റൺ റദ്ദാക്കൽ പുറം ഹാൻഡ്ലറിലേക്ക് രക്ഷപ്പെടാൻ അനുവദിക്കുക. സമാന്തര പരിശോധനകൾക്ക്, റൺ ടോക്കൺ ഓരോ തൊഴിലാളിയുമായി പങ്കിടുക, മറ്റൊരു റൺ പ്രവർത്തനക്ഷമമാക്കുന്നതിന് മുമ്പ് അവർ പൂർത്തിയാകുന്നത് കാത്തിരിക്കുക.

അനുബന്ധ ലേഖനങ്ങൾ