Task.WaitAll an engem WinForms-Klick-Handler blockéiert d'Fënster och wann d'Prüfunge selwer asynchronen HTTP benotzen. Den UI-Thread kann keng Noriichte verschaffen, an d'gefangene Fortsetzunge brauche vläicht dee selwechte blockéierten Thread.

Fir .NET 6 oder méi nei, waart amplaz op e begrenzte Batch:

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

Dëst gehéiert an eng existéierend Form mat System.Linq an System.Threading.Tasks verfügbar. CheckProxyAsync mécht begrenzt asynchron I/O an zréck een Resultat; et manipuléiert keng Kontrollen aus engem Hannergrond-Thread. ShowResults an ShowCheckError sinn Applikatiounsmethoden.

Déi normal await-Fortsetzung kënnt zréck an den UI-Kontext wou den Handler ugefaang huet, sou datt ShowResults Kontrollen aktualiséiere kann. Code deen explicite op engem aneren Thread leeft, muss de Kontrollzougang iwwer dee ënnerstützte WinForms-Mechanismus marshallen.

D'gratis Proxy-Lëscht kann Inputadressen ubidden; gitt nëmme Protokoller duer, déi CheckProxyAsync ëmsetzt. Aacht ass e Beispillbudget. Den nächste Batch waart op déi luesste Prüfung am aktuelle Batch an tauscht e bëssen Duerchsaatz géint begrenzt Aufgabenerstellung. Halt d'Deadlines vun all Prüfung an d'Annulatioun am CheckProxyAsync; op e Batch ze waarden kann eng onbegrenzt Netzwierkoperatioun net fäerdeg maachen.

Ähnlech Artikelen