123456789101112131415161718192021222324252627282930313233343536 |
- discard """
- output: '''true'''
- """
- # bug #7638
- import threadpool, os, strformat
- proc timer(d: int): int =
- #echo fmt"sleeping {d}"
- sleep(d)
- #echo fmt"done {d}"
- return d
- var durations = [1000, 1500, 2000, 2500, 3000]
- var tasks: seq[FlowVarBase] = @[]
- var results: seq[int] = @[]
- for i in 0 .. durations.high:
- tasks.add spawn timer(durations[i])
- var index = blockUntilAny(tasks)
- while index != -1:
- results.add ^cast[FlowVar[int]](tasks[index])
- tasks.del(index)
- #echo repr results
- index = blockUntilAny(tasks)
- doAssert results.len == 5
- doAssert 1000 in results
- doAssert 1500 in results
- doAssert 2000 in results
- doAssert 2500 in results
- doAssert 3000 in results
- sync()
- echo "true"
|