欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PowerShell多线程执行前后台作业的例子

程序员文章站 2022-04-09 14:46:01
下面例子使用powershell线程运行了两个后台任务和一个前台任务,创建几个运行时间长点的任务,并且每个任务命令中添加使用start-sleep。 复制代码 代码如下:...

下面例子使用powershell线程运行了两个后台任务和一个前台任务,创建几个运行时间长点的任务,并且每个任务命令中添加使用start-sleep。

复制代码 代码如下:

$start = get-date

$task1 = { start-sleep -seconds 4; get-service }
$task2 = { start-sleep -seconds 5; get-service }
$task3 = { start-sleep -seconds 3; get-service }

# run 2 in separate threads, 1 in the foreground
$thread1 = [powershell]::create()
$job1 = $thread1.addscript($task1).begininvoke()

$thread2 = [powershell]::create()
$job2 = $thread2.addscript($task2).begininvoke()

$result3 = invoke-command -scriptblock $task3

do { start-sleep -milliseconds 100 } until ($job1.iscompleted -and $job2.iscompleted)

$result1 = $thread1.endinvoke($job1)
$result2 = $thread2.endinvoke($job2)

$thread1.runspace.close()
$thread1.dispose()

$thread2.runspace.close()
$thread2.dispose()

$end = get-date
write-host -foregroundcolor red ($end - $start).totalseconds

相继执行这3个任务从start-sleep中看至少需要花费12秒。但是这个脚本仅执行了5秒多一点。其结果保存为$result1, $result2和$result3。与后台作业对比,它在返回大数据用时将差不多。

文章出处:http://www.pstips.net/