Stoppt d'Blockéiere vu WinForms, wärend Proxy-Prüfunge lafen
Ersetzt en synchrone Task.WaitAll am UI-Evenement-Handler duerch ofwaart, begrenzt Batches, a aktualiséiert duerno d'Kontrolle am ugehalene UI-Kontext.
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.