PowerShell v4, 144 байта
$d=date;gjb|rjb
1..20|%{sajb{$x=date;sleep 3;((date)-$x).Ticks/1e7}>$null}
while(gjb -s "Running"){}(gjb|rcjb)-join'+'|iex
((date)-$d).Ticks/1e7
Устанавливает $dравным Get-Dateи очищает любые существующие истории заданий с Get-Job | Remove-Job. Затем мы 1..20|%{...}выполняем цикл и выполняем каждую итерацию, Start-Jobпередавая ему блок сценария {$x=date;sleep 3;((date)-$x).ticks/1e7}для задания (то есть каждое задание будет выполнять этот блок сценария). Мы направляем этот вывод для >$nullподавления обратной связи (т. Е. Имени задания, статуса и т. Д.), Которая возвращается.
Блок сценария устанавливается $xна Get-Date, затем Start-Sleepна 3несколько секунд, затем принимает новое Get-Dateчтение, вычитает $x, получает .Ticksи делит на, 1e7чтобы получить секунды (с точностью).
Вернемся к основной теме, пока любая работа по-прежнему -Sтатус "Running", мы вращаемся внутри пустой whileпетли. Как только это будет сделано, мы будем Get-Jobизвлекать объекты для всех существующих заданий, направлять те, в Receive-Jobкоторые будет извлекать эквивалент STDOUT (то есть то, что они выводят), -joinрезультаты вместе с ними +и направлять iex( Invoke-Expressionи аналогично eval). Это выведет итоговое время ожидания плюс накладные расходы.
Последняя строка похожа в том, что она получает новую дату, вычитает исходную отметку даты $d, получает .Ticksи делит 1e7для вывода общего времени выполнения.
NB
Хорошо, так что это немного изгиба правил. По-видимому, при первом выполнении PowerShell необходимо загрузить несколько сборок .NET с диска для различных операций с потоками, поскольку они не загружены с профилем оболочки по умолчанию. Последующие исполнения, поскольку сборки уже находятся в памяти, работают нормально. Если вы оставите окно оболочки в бездействии достаточно долго, вы получите встроенную сборку мусора PowerShell и разгрузите все эти сборки, в результате чего следующее выполнение займет много времени, так как он перезагружает их. Я не уверен, что можно обойти это.
Вы можете увидеть это во время выполнения в следующих запусках. Я запустил новую оболочку, перешел к своему каталогу по гольфу и выполнил сценарий. Первый запуск был ужасным, но второй (выполненный немедленно) работал нормально. Затем я оставил оболочку на несколько минут бездействующей, чтобы позволить сборке мусора, и затем этот цикл снова стал длительным, но последующие циклы снова работают нормально.
Пример работает
Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. All rights reserved.
PS H:\> c:
PS C:\> cd C:\Tools\Scripts\golfing
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
63.232359
67.8403415
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
61.0809705
8.8991164
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
62.5791712
67.3228933
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
61.1303589
8.5939405
PS C:\Tools\Scripts\golfing> .\wait-a-minute.ps1
61.3210352
8.6386886
PS C:\Tools\Scripts\golfing>