mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 17:04:41 +00:00
* complete future only once in `or` Analogous to `and`. Credits to @k0zmo for proposing the solution. * add test
34 lines
656 B
Nim
34 lines
656 B
Nim
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"
|