node.js - 如何在 PowerShell 中并行编写等效于节点的异步?
问题描述
在 node.js 中,您可以一次启动多个异步函数,然后让它们在它们全部完成后将结果返回给一个函数:理解节点 js-async-parallel
在 PowerShell 中,我看到了类似的功能,Start-Job
但是!当实际尝试运行任务时,它们似乎滞后太多,无法实现非阻塞并并行启动:
Write-Host "Running jobs $($start) - $($end)"
for($i = [int]$start; $i -le $end; $i++) {
$jobResults += Start-Job -ScriptBlock $someFunc | wait-job | receive-job
}
我相信这源于wait-job
等待启动的工作在接收之前完成的功能。
有没有办法等待所有这些并将它们接收到像节点异步一样的数组中?还是我在这里看苹果和橘子?
解决方案
您的代码段实际上是在同步运行作业。要异步运行它们,请执行以下操作:
$jobs = {sleep 5; Write-Output "job1"}, {sleep 6; Write-Output "job2"}, {sleep 7; Write-Output "job3"}
$result = $jobs | foreach { start-job $_ } | wait-job | receive-job
尽管 Start-Job 将创建一个新进程(如果您的作业只运行几秒钟,这可能不是最佳选择)。如果您需要在单独的线程中运行作业,则需要使用运行空间。您可以手动编码,但也有一些工具(如Invoke-Parallel)
推荐阅读
- ssl - 带有 SSL 的端口 8765 的 NGINX 反向代理不起作用
- python - 哪种方式最好读取镶木地板文件以作为 dask 数据帧处理
- performance - 有没有办法在读取多个文件时并行化 spark.read.load(string*) ?
- javascript - 套接字断开后如何显示消息
- twig - 如何获取给定类别的文章网址?
- javascript - 使计算属性全局可用
- keycloak - keycloak 上是否存在任何 REST API 来管理没有管理员 api/帐户的单个用户的帐户详细信息?
- python-3.x - pyspark 具有现有列字符串条件的新列(带有特殊字符)
- python - Python/Pandas - 我怎样才能只保留外连接的父数据框?
- wpf - 动态资源合并不将样式应用于第一个控件