අවලංගු කරන්න බොත්තම ධාවනය නවත්විය යුතුය. සෑම ප්‍රොක්සි පරීක්ෂණයක්ම අවලංගු කිරීම අල්ලා සාමාන්‍ය ලෙස ආපසු පැමිණේ නම්, පිටත ලූපය ඊළඟ ප්‍රොක්සියට යයි. එවිට තිරය අවලංගු කිරීම කිසිවක් නොකළාක් මෙන් පෙනේ.

නවීන .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 පවතින පරීක්ෂකයට අයත් වේ. මෙම අන්ත ලක්ෂ්‍යය සඳහා සුදුසු ප්‍රතිචාර ප්‍රමාණ සීමාවක් සහ කාල සීමාවක් තබාගන්න. නිෂ්පාදන පරීක්ෂකයට මාර්ගය අනුව සේවාදායක නැවත භාවිත කළ හැක; කොටසින් පෙන්වන්නේ අවලංගු කිරීම කොහේ යනවාද, සම්බන්ධතා තටාක නිර්මාණයක් නොවේ.

අසාර්ථක ප්‍රොක්සි වාර්තා කර මඟ හැරිය යුතු නම්, තනි පරීක්ෂණය වටා අපේක්ෂිත ජාල අසාර්ථකතා අල්ලා ගන්න. ධාවන අවලංගු කිරීම පිටත හසුරුවන්නා වෙත පැන යාමට ඉඩ දෙන්න. සමාන්තර පරීක්ෂණ සඳහා, ධාවන ටෝකනය සෑම සේවකයෙකු සමඟම බෙදාගෙන තවත් ධාවනයක් සක්‍රීය කිරීමට පෙර ඔවුන් සම්පූර්ණ වන තෙක් බලා සිටින්න.

අදාළ ලිපි