Pular para o conteúdo

Quando algo falha no laço

Um erro num retorno de chamada é contado, e não propagado: uma conexão ruim não derruba o servidor.

Num reator, todas as conexões dividem a mesma thread. Se um erro no tratamento de uma conexão subisse até o laço, derrubaria todas as outras. Por isso o erro é anotado e o laço segue — e as falhas ficam disponíveis para o log e para o teste.

dataforge
adopt Arcane.Laco as L

laco := L.novo()
L.agendar(laco, lambda => 1 / 0)
atendidos := []
L.agendar(laco, lambda => atendidos.append("a outra conexão"))
L.apos(laco, 10, lambda => L.parar(laco))
L.rodar(laco)

assert atendidos is ["a outra conexão"]            // seguiu atendendo
f := L.falhas(laco)
assert len(f) is 1
out f[0]["erro"], f[0]["onde"]