PowerShell v4, 144 bytes
$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
Define $digual a Get-Datee limpa todos os históricos de trabalhos existentes Get-Job | Remove-Job. Em seguida, fazemos um loop 1..20|%{...}e cada iteração é executada Start-Jobpassando o bloco de scripts {$x=date;sleep 3;((date)-$x).ticks/1e7}para o trabalho (o que significa que cada trabalho executará esse bloco de script). Canalizamos essa saída para >$nullsuprimir o feedback (nome do trabalho, status etc.) que é retornado.
O bloco de script define $xcomo Get-Date, então, Start-Sleeppor 3segundos, em seguida, recebe uma nova Get-Dateleitura, subtrai $x, obtém o .Tickse divide por 1e7para obter os segundos (com precisão).
De volta à thread principal, desde que qualquer trabalho ainda seja -Sobrigatório "Running", giramos dentro de um whileloop vazio . Uma vez feito isso, Get-Jobpuxamos objetos para todos os trabalhos existentes, canalizamos aqueles para os Receive-Jobquais o equivalente a STDOUT (ou seja, o que eles produzem), -joinos resultados juntos +, e canalizamos iex( Invoke-Expressione semelhante a eval). Isso produzirá o tempo de suspensão resultante mais a sobrecarga.
A linha final é semelhante, na medida em que obtém uma nova data, subtrai o carimbo de data original $d, obtém o .Tickse divide por 1e7para gerar o tempo total de execução.
NB
OK, então isso é um pouco flexível das regras. Aparentemente, na primeira execução, o PowerShell precisa carregar vários assemblies .NET do disco para as várias operações de encadeamento, pois elas não são carregadas com o perfil de shell padrão. Execuções subseqüentes , porque os assemblies já estão na memória, funcionam bem. Se você deixar a janela do shell inativa por tempo suficiente, você fará com que a coleta de lixo interna do PowerShell apareça e descarregue todos esses assemblies, fazendo com que a próxima execução demore muito tempo enquanto ela é carregada novamente. Eu não tenho certeza de uma maneira de contornar isso.
Você pode ver isso nos tempos de execução nas execuções abaixo. Comecei um novo shell, naveguei para o meu diretório de golfe e executei o script. A primeira corrida foi horrenda, mas a segunda (executada imediatamente) funcionou bem. Em seguida, deixei o shell inativo por alguns minutos para permitir a coleta de lixo e, em seguida, essa execução é novamente demorada, mas as execuções subseqüentes novamente funcionam bem.
Execuções de exemplo
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>