Task.WaitAll f'handler tal-klikk ta' WinForms jibblokka t-tieqa anki meta l-verifiki stess jużaw HTTP asinkroniku. Il-ħajta tal-UI ma tistax tipproċessa messaġġi, u l-continuations maqbuda jistgħu jkunu jeħtieġu dik il-ħajta blokkata stess.

Għal .NET 6 jew aktar tard, minflok stenna baċċa limitata:

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;
    }
}

Dan jaqa' f'formola eżistenti b'System.Linq u System.Threading.Tasks disponibbli. CheckProxyAsync tagħmel I/O asinkroniku limitat u tirritorna riżultat wieħed; ma timmanipulax il-kontrolli minn ħajta tal-isfond. ShowResults u ShowCheckError huma metodi tal-applikazzjoni.

Il-continuation normali ta' await tirritorna għall-kuntest tal-UI fejn beda l-handler, għalhekk ShowResults tista' taġġorna l-kontrolli. Kodiċi li jkun qed jaħdem b'mod espliċitu fuq ħajta oħra għandu jgħaddi l-aċċess għall-kontrolli permezz tal-mekkaniżmu tal-WinForms appoġġjat.

Il-lista tal-proxy b'xejn tista' tforni indirizzi tal-input; għaddi biss protokolli implimentati minn CheckProxyAsync. Tmienja hija baġit ta' eżempju. Il-baċċa li jmiss tistenna l-aktar verifika bil-mod fil-baċċa attwali, u tbiddel ftit throughput għal ħolqien limitat ta' kompiti. Żomm l-iskadenzi ta' kull verifika u l-kanċellazzjoni f'CheckProxyAsync; l-istennija ta' baċċa ma tistax tagħmel operazzjoni tan-network bla limitu tispiċċa.

Artikli relatati