Как заставить PowerShell выполнять асинхронно выполнение трубопроводов вместо «последовательно»?Как выполнить асинхронный трубопровод Powershell
В качестве примера для иллюстрации этого:
Function PipeDelay($Name, $Miliseconds){
Process {
Sleep -miliseconds $Miliseconds
Write-Host "$Name : $_"
$_
}
}
1..7 | PipeDelay Fast 100 | PipeDelay Slow 300 | PipeDelay Slowest 900
Выход в обоих ISE и PowerShell являются следующие:
Fast : 1
Slow : 1
Slowest : 1
1
Fast : 2
Slow : 2
Slowest : 2
2
Fast : 3
Slow : 3
Slowest : 3
3
...
Это как если бы Powershell последовательно запустить весь трубопровод для одного входного объекта перед обработка следующего входного объекта. Исполнение выглядит примерно так:
Fast : 1 2 3
Slow : 1---1 2---2 3---3
Slowest : 1---------------1 2---------------2 3-----...
Возможно ли это с некоторыми настройками/переменными окружения/и т. Д. чтобы трубопроводы выполнялись независимо/асинхронно? возможно, с настройкой размера буфера для буфера и т. д.? Так что исполнение будет выглядеть примерно так:
Fast : 1 2 3 4 5 6 7
Slow : 1---1 2---2 3---3 4---4 5---5 6---6 7---7
Slowest : 1---------------1 2---------------2 3-----...
NOTE
Я думал, что это из-за режима STA/MTA. Я не понимаю их полностью, но тот же результат в ISE (STA)/Powershell Shell (MTA), по-видимому, устраняет режим STA/MTA в качестве причины.
Кроме того, я подумал Write-Host
это вопрос, который принудительно трубопровод должен быть обработан последовательно, но даже если я заменить Write-Host
с New-Event
, последовательная обработка все еще применяется.
Добро пожаловать на сайт. Это еще не ответ, но вы можете улучшить его и сделать полный ответ: добавьте подробную информацию о том, как это обеспечивает решение, объясните, что такое psaync и что будет найдено на ссылочных URL-адресах (связанные страницы могут быть удалены или перемещены). – mins