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 માં રાખો; બેચની રાહ જોવાથી અમર્યાદિત નેટવર્ક કામગીરી પૂરી થઈ શકતી નથી.

સંબંધિત લેખો