Multithreading Powershell,停止工作太长时间了

Multithreading Powershell,停止工作太长时间了,multithreading,powershell,timeout,jobs,Multithreading,Powershell,Timeout,Jobs,我创建了一个powershell作业,我想将其运行时间限制为10秒。 所以我使用了Wait Job命令,如果超时,我会执行Stop Job命令。 问题是Stop Job命令大约需要2分钟。 我如何修复它并立即停止工作 While($hasTimeFromNTP -eq $false) { Write-Host "Start get time from NTP" -ForegroundColor Yellow Start-Job -Name GetNTPTime -ScriptBl

我创建了一个powershell作业,我想将其运行时间限制为10秒。 所以我使用了Wait Job命令,如果超时,我会执行Stop Job命令。 问题是Stop Job命令大约需要2分钟。 我如何修复它并立即停止工作

While($hasTimeFromNTP -eq $false)
{
    Write-Host "Start get time from NTP" -ForegroundColor Yellow
    Start-Job -Name GetNTPTime -ScriptBlock $getTimeFromNtp | Out-Null
    $result = Wait-Job GetNTPTime -Timeout 10
    if($result -ne $null)
    {
        $NTPTime = Receive-Job GetNTPTime
        $hasTimeFromNTP = $true
    }
    else
    {
        Write-Host "GetTimeFromNTP timed out"
        Stop-Job GetNTPTime
        Remove-Job GetNTPTime -Force
    }
}

谢谢

我在停止作业时没有看到
-Force
参数。一个选项是让作业返回它在
$pid
中运行的PowerShell进程id作为初始输出。您可以使用该pid停止为该后台作业启动的Powershell.exe进程。这很苛刻,但如果您不想等待2分钟,我看不到其他方法可以迫使作业更快停止。

我在一台机器上经历过这种缓慢停止作业,但在其他机器上没有。重新启动那台机器后,我也不再在那里遇到它。请确保代码不会挂在作业中的任何行上,因为如果代码实际正在运行且没有等待(如网络接收),它会停止得更快。另外,请使用“开始睡眠”而不是“[Threading.Thread]::Sleep()”。因为启动睡眠可以被中断,但win API睡眠不能。