منسوخ کریں بٹن کو رن روکنا چاہیے۔ اگر ہر پراکسی جانچ منسوخی پکڑ کر معمول کے مطابق واپس آئے، تو بیرونی لوپ صرف اگلی پراکسی پر چلا جاتا ہے۔ تب اسکرین ایسی دکھتی ہے جیسے منسوخ کریں نے کچھ نہیں کیا۔

جدید .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 موجودہ جانچ کنندہ کے ہیں۔ اس اینڈ پوائنٹ کے لیے مناسب جوابی حجم کی حد اور وقت کی حد رکھیں۔ پروڈکشن جانچ کنندہ راستے کے مطابق کلائنٹ دوبارہ استعمال کر سکتا ہے؛ ٹکڑا دکھاتا ہے کہ منسوخی کہاں جاتی ہے، کنکشن پول ڈیزائن نہیں۔

اگر ناکام پراکسیوں کو ریکارڈ کر کے چھوڑنا ہے، تو انفرادی جانچ کے ارد گرد متوقع نیٹ ورک ناکامیاں پکڑیں۔ رن کی منسوخی کو بیرونی ہینڈلر تک نکلنے دیں۔ متوازی جانچوں کے لیے، رن ٹوکن ہر کارکن کے ساتھ بانٹیں اور دوسری رن فعال کرنے سے پہلے ان کے مکمل ہونے کا انتظار کریں۔

متعلقہ مضامین