我按照链接http://blogs.msdn.com/b/powershell/archive/2011/04/04/scaling-and-queuing-powershell-background-jobs.aspx中的示例创建了一个脚本。但是,我需要一个脚本块返回值$result
的列表。如何修改脚本来完成它?
$maxConcurrentJobs = 3;
# Read the input and queue it up
$jobInput = get-content .\input.txt
$queue = [System.Collections.Queue]::Synchronized( (New-Object System.Collections.Queue) )
foreach($item in $jobInput)
{
$queue.Enqueue($item)
}
# Function that pops input off the queue and starts a job with it
function RunJobFromQueue
{
if( $queue.Count -gt 0)
{
$j = Start-Job -ScriptBlock {
param($x);
#.....
$result ######### Need this value returned to the main script
} -ArgumentList $queue.Dequeue()
Register-ObjectEvent -InputObject $j -EventName StateChanged -Action {
RunJobFromQueue;
Unregister-Event $eventsubscriber.SourceIdentifier;
Remove-Job $eventsubscriber.SourceIdentifier
} | Out-Null
}
}
# Start up to the max number of concurrent jobs
# Each job will take care of running the rest
for( $i = 0; $i -lt $maxConcurrentJobs; $i++ )
{
RunJobFromQueue
}
######## Process a list of $result
答案 0 :(得分:0)
将$ result序列化为文件。
当您进入'#处理$ result'的列表时 - 指向,查找文件并反序列化它们。
注意:您必须找到一种确定异步作业何时首先完成的好方法! (也许使用job-name = $结果文件名,如果$ result file name =一个不存在的工作名,可以安全打开)
答案 1 :(得分:0)
在删除已完成的作业之前添加Receive-Job $eventsubscriber.SourceIdentifier
,并且不要将输出通过管道传输到Out-Null
。