PowerShell: Threading for PowerShell v1.0
Ok, so this solution really isn't threading, but a neat way to get async scripts to run! The important thing to remember is that each "thread" is actually a PowerShell "runspace". Meaning, scripts run within the thread don't have access to objects or functions defined outside the thread. The script is composed of the following commands:
New-Thread: Creates a new instance of a thread
Start-Thread: Invokes an async execution of a script block
Stop-Thread: Stops a thread from running if it is still executing
Read-Thread: Reads all errors and output to the current runspace
Join-Thread: Waits for the thread to complete and reads off the errors and output to the current runspace
A simple example of how to use this is as follows.
$thread = Start-Thread {
foreach ($i in (1..5)) {
echo "Sleeping for $i seconds..."
Start-Sleep $i
}
}
# ... do some work here or spawn other threads
Join-Thread $thread
I have some other ideas around injecting "variables" and being able to run script blocks within the new "thread" but I'll save that for a later post ...