Jooji xannibaadda WinForms inta hubinta proxy socoto
Ku beddel Task.WaitAll synchronous ee ku jira handler-ka dhacdada UI xirmooyin la sugayo oo xaddidan, ka dibna cusboonaysii kontaroolada context-ka UI ee dib loo bilaabay.
Task.WaitAll ee handler-ka gujista WinForms waxa uu xannibaa daaqadda xitaa marka hubinta laftoodu isticmaalaan HTTP asynchronous. Siliga UI ma farsamayn karo fariimaha, oo continuation-ka la qabtay waxa laga yaabaa inuu u baahdo isla siliga xanniban.
Wixii .NET 6 ama ka dambeeya, taa beddelkeed sug xirmo xaddidan:
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;
}
}Tani waxay ku deelataa foom hore oo leh System.Linq iyo System.Threading.Tasks diyaar. CheckProxyAsync waxay qabataa gelitaan iyo soo-saar asynchronous xaddidan oo soo celisaa hal natiijo; ma maamusho kontaroolada silig asal ah. ShowResults iyo ShowCheckError waa hababka application-ka.
Continuation-ka caadiga ah ee await waxa uu ku noqdaa context-ka UI ee uu handler-ku ka bilaabmay, sidaas darteed ShowResults waxa uu cusboonaysiin karaa kontaroolada. Koodhka si cad ugu socda silig kale waa in uu gudbiyo gelitaanka kontaroolada iyada oo loo marayo habka WinForms ee la taageeray.
Liiska proxy bilaashka ah waxa uu bixin karaa ciwaannada gelinta; gudbi oo kaliya borotokoolo ay fuliso CheckProxyAsync. Sideed waa miisaaniyad tusaale ah. Xirmada xigta waxay sugtaa hubinta ugu gaabis badan xirmada hadda, iyada oo beddelaysa xoogaa throughput ah abuurista shaqo xaddidan. Hayso waqtiyada kasta ee hubinta iyo cancellation gudaha CheckProxyAsync; sugitaanka xirmo ma samayn karo in hawlgal shabakadeed aan xad lahayn uu dhammaado.