Task.WaitAll এ WinForms ক্লিক হেণ্ডলাৰত উইণ্ডো ব্লক কৰে, যদিও পৰীক্ষাসমূহে নিজেই asynchronous HTTP ব্যৱহাৰ কৰে। UI থ্ৰেডে বাৰ্তা প্ৰচেছ কৰিব নোৱাৰে, আৰু ধৰি লোৱা continuation-সমূহে সেই একেটা ব্লক হোৱা থ্ৰেডৰ প্ৰয়োজন হ'ব পাৰে।

.NET 6 বা তাতকৈ নতুনৰ বাবে, ইয়াৰ পৰিৱৰ্তে এটা সীমিত বেটচৰ বাবে অপেক্ষা কৰক:

private async void checkButton_Click(object sender, EventArgs e)
{
    checkButton.Enabled = false;
    try
    {
        var entries = proxyList.Lines
            .Where(line => !string.IsNullOrWhiteSpace(line));
        foreach (var batch in entries.Chunk(8))
        {
            var results = await Task.WhenAll(batch.Select(CheckProxyAsync));
            ShowResults(results);
        }
    }
    catch (Exception error)
    {
        ShowCheckError(error);
    }
    finally
    {
        checkButton.Enabled = true;
    }
}

এইটো এটা বিদ্যমান ফৰ্মত System.Linq আৰু System.Threading.Tasks উপলব্ধ হৈ থকা অৱস্থাত থাকে। CheckProxyAsync এ সীমিত asynchronous I/O কৰে আৰু এটা ফলাফল ঘূৰাই দিয়ে; ই পটভূমি থ্ৰেডৰ পৰা নিয়ন্ত্ৰণ পৰিচালনা নকৰে। ShowResults আৰু ShowCheckError এপ্লিকেচন পদ্ধতি।

সাধাৰণ await continuation-এ হেণ্ডলাৰ য'ৰ পৰা আৰম্ভ হৈছিল সেই UI প্ৰসংগলৈ ঘূৰি আহে, গতিকে ShowResults এ নিয়ন্ত্ৰণ আপডেট কৰিব পাৰে। আন থ্ৰেডত স্পষ্টভাৱে চলি থকা ক'ডে সমৰ্থিত WinForms পদ্ধতিৰ জৰিয়তে নিয়ন্ত্ৰণ-প্ৰৱেশ প্ৰেৰণ কৰিব লাগিব।

বিনামূলীয়া প্ৰক্সি তালিকা-এ ইনপুট ঠিকনা যোগান ধৰিব পাৰে; কেৱল CheckProxyAsync-এ ৰূপায়ণ কৰা প্ৰট'কলসমূহহে পাছ কৰক। আঠ এটা উদাহৰণ বাজেট। পৰৱৰ্তী বেটচে বৰ্তমান বেটচৰ আটাইতকৈ লেহেম পৰীক্ষাৰ বাবে অপেক্ষা কৰে, যাৰ ফলত কিছু থ্ৰুপুট সীমিত টাস্ক সৃষ্টিৰ বিনিময়ত যায়। প্ৰতিটো পৰীক্ষাৰ সময়সীমা আৰু বাতিল CheckProxyAsync-ত ৰাখক; বেটচৰ বাবে অপেক্ষা কৰিলে অসীম নেটৱৰ্ক অপাৰেচন সম্পূৰ্ণ কৰিব নোৱাৰে।

সম্পৰ্কিত প্ৰবন্ধ