Мне нужно загружать некоторый веб-контент параллельно со многих серверов как часть запланированного задания, но я не могу найти правильный способ запустить загрузку параллельно / асинхронно. Как это можно сделать?
Без какого-либо параллелизма я могу сделать это таким образом, но это очень медленно:
$web = [System.Net.WebClient]::new()
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# $srvList is a list of servers of viariable length
$allData = ""
foreach ($srv in $srvList) {
$url = "https:\\$srv\MyWebPage"
$data = $web.DownloadString($url)
$allData += $data
}
Но как сделать это параллельно через "$ web.DownloadStringAsync«? Я нашел этот фрагмент, но не вижу, как получить результат каждого вызова и как его объединить:
$job = Register-ObjectEvent -InputObject $web -EventName DownloadStringCompleted -Action {
Write-Host 'Download completed'
write-host $EventArgs.Result
}
$web.DownloadString($url)
Кто-нибудь знает, как решить эту проблему кратким и умным способом?