Bagaimana cara membuat Powershell mengeksekusi jaringan pipa secara asinkron, bukan 'berurutan'?
Contoh untuk menggambarkan hal ini:
Function PipeDelay($Name, $Miliseconds){
Process {
Sleep -miliseconds $Miliseconds
Write-Host "$Name : $_"
$_
}
}
1..7 | PipeDelay Fast 100 | PipeDelay Slow 300 | PipeDelay Slowest 900
Output di ISE dan PowerShell adalah sebagai berikut:
Fast : 1
Slow : 1
Slowest : 1
1
Fast : 2
Slow : 2
Slowest : 2
2
Fast : 3
Slow : 3
Slowest : 3
3
...
Seolah-olah Powershell menjalankan seluruh pipa secara berurutan untuk satu objek masukan sebelum memproses objek masukan berikutnya. Eksekusinya terlihat seperti ini:
Fast : 1 2 3
Slow : 1---1 2---2 3---3
Slowest : 1---------------1 2---------------2 3-----...
Apakah mungkin dengan beberapa pengaturan/variabel lingkungan/dll. untuk membuat saluran pipa berjalan secara mandiri/asinkron? mungkin dengan pengaturan tentang ukuran buffer pipa, dll.? Sehingga eksekusinya akan terlihat seperti ini:
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-----...
CATATAN
Saya pikir itu karena mode STA/MTA. Saya tidak memahaminya sepenuhnya tetapi hasil yang sama di ISE (STA)/Powershell Shell (MTA) tampaknya menghilangkan mode STA/MTA sebagai penyebabnya.
Selain itu, saya pikir Write-Host
adalah masalah yang memaksa pipa diproses secara berurutan, tetapi meskipun saya mengganti Write-Host
dengan New-Event
, pemrosesan berurutan tetap berlaku.
load-from-file | do-something-fast | do-something-slow | do-something-slowest | save-to-file
- person Gregor y   schedule 30.07.2019