Managing concurrent access
When writing code that runs asynchronously, it can be desirable to write to a resource that does not support concurrent access. For example, when writing to a log file, Windows will not allow two simultaneous write operations to a file.
Consider the following script. This script does nothing more than write a log file entry:
$script = {
    param (
        $Path,
        $RunspaceName
    )
    # Some long running activity
    $message = '{0:HH:mm:ss.fff}: Writing from runspace {1}' -f @(
        Get-Date
        $RunspaceName
    )
    [System.IO.File]::AppendAllLines(
        $Path,
        [string[]]$message
    )
}
    The script uses the AppendAllLines method instead of a command like Add-Content as it better exposes an error that shows the problem with the script.
Before starting, ensure the runspace.log file does not exist:
Remove-Item runspace.log
    When multiple instances of this script run, there are potentially attempts...