proc slow(label: Str, ms: Int): Str {
hive.task.sleep(ms)
return label
}
proc main(): void {
both := await [slow("a", 40), slow("b", 40)] // uma barreira, um Str[2]
echo both
echo both[1] // tamanho estático: sem guarda
}proc note(text: Str): void {
hive.task.sleep(20)
echo text
}
proc main(): void {
// Nada em que se resolver, então é uma instrução: um lote de efeitos
// concluído antes da próxima linha, cada um em sua própria thread.
await [note("primeiro"), note("segundo")]
echo "os dois avisos chegaram"
}await [f(a), g(b)] inicia cada chamada da lista numa thread própria e espera por todas, como uma barreira só. É o único await que existe:
x := async f().await [] é um erro de compilação.Os argumentos de cada chamada são copiados antes de a thread dela começar, exatamente como com async, e não há como cancelar uma chamada depois que ela começou.