Пара вещей ...
Наличие тайм-аута не требует асинхронной обработки.У вас может быть процесс синхронизации (как в вашем примере), который имеет тайм-аут.
Простой скрипт синхронизации с тайм-аутом ...
$timeout_in_seconds = 10
$timer = [Diagnostics.Stopwatch]::StartNew()
do {
Start-Sleep -Seconds 1
Write-Host 'Doing stuff'
} while ( (1 -eq 1) -and ($timer.Elapsed.TotalSeconds -lt $timeout_in_seconds) )
$timer.Stop()
$timer.Elapsed.TotalSeconds
Упростил ваш пример просто на волоске, чтобы продемонстрировать точку,Я устанавливаю интервал пробега (10 секунд).Я запускаю таймер.Я запускаю цикл, пока не достигну условия успеха (которого в этом примере я никогда не выполню) или пока не истечет время ожидания.Вы бы сделали то же самое.
Для вашего конкретного примера рассмотрим что-то вроде ...
$server = '...'
$timeout_in_seconds = 5;
$timer = [Diagnostics.Stopwatch]::StartNew();
do {
Write-Host "Test-path inside of loop";
Start-Sleep -Seconds 1;
$testShare = Test-Path "\\$server\c$";
Write-Host "Share availability is:" $testShare;
} while ( $($testShare) -and ($timer.Elapsed.TotalSeconds -lt $timeout_in_seconds) )
$timer.Stop();
$timer.Elapsed.TotalSeconds;
Цикл завершается, когда существует общий ресурс или достигнут временной интервал.Обратите внимание, вам нужно установить переменную $server
.