* complete future only once in `or` Analogous to `and`. Credits to @k0zmo for proposing the solution. * add test
This commit is contained in:
parent
8d850f7a69
commit
964b5dac7c
2 changed files with 36 additions and 2 deletions
33
tests/async/t8982.nim
Normal file
33
tests/async/t8982.nim
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
discard """
|
||||
output: '''
|
||||
timeout
|
||||
runForever should throw ValueError, this is expected
|
||||
'''
|
||||
"""
|
||||
|
||||
|
||||
import asyncdispatch
|
||||
|
||||
proc failingAwaitable(p: int) {.async.} =
|
||||
await sleepAsync(500)
|
||||
if p > 0:
|
||||
raise newException(Exception, "my exception")
|
||||
|
||||
proc main() {.async.} =
|
||||
let fut = failingAwaitable(1)
|
||||
try:
|
||||
await fut or sleepAsync(100)
|
||||
if fut.finished:
|
||||
echo "finished"
|
||||
else:
|
||||
echo "timeout"
|
||||
except:
|
||||
echo "failed"
|
||||
|
||||
|
||||
# Previously this would raise "An attempt was made to complete a Future more than once."
|
||||
try:
|
||||
asyncCheck main()
|
||||
runForever()
|
||||
except ValueError:
|
||||
echo "runForever should throw ValueError, this is expected"
|
||||
Loading…
Add table
Add a link
Reference in a new issue