mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-18 02:27:10 +00:00
* Fix asyncdispatch drain behavior (#14820) * Changed test to use asyncCheck instead of discard after code review (#14820) * Added some debug statements to help understand what is happening in Azure. * Removed debug statements and increased timeouts by 1 order of magnitude to account for slow Azure VMs Co-authored-by: Ray Imber <ray@crankuptheamps.com>
This commit is contained in:
@@ -1601,11 +1601,16 @@ else:
|
||||
p.selector.registerEvent(SelectEvent(ev), data)
|
||||
|
||||
proc drain*(timeout = 500) =
|
||||
## Waits for completion events and processes them. Raises ``ValueError``
|
||||
## Waits for completion of **all** events and processes them. Raises ``ValueError``
|
||||
## if there are no pending operations. In contrast to ``poll`` this
|
||||
## processes as many events as are available.
|
||||
if runOnce(timeout) or hasPendingOperations():
|
||||
while hasPendingOperations() and runOnce(timeout): discard
|
||||
## processes as many events as are available until the timeout has elapsed.
|
||||
var curTimeout = timeout
|
||||
let start = now()
|
||||
while hasPendingOperations():
|
||||
discard runOnce(curTimeout)
|
||||
curTimeout -= (now() - start).inMilliseconds.int
|
||||
if curTimeout < 0:
|
||||
break
|
||||
|
||||
proc poll*(timeout = 500) =
|
||||
## Waits for completion events and processes them. Raises ``ValueError``
|
||||
|
||||
25
tests/async/t14820.nim
Normal file
25
tests/async/t14820.nim
Normal file
@@ -0,0 +1,25 @@
|
||||
discard """
|
||||
output: '''
|
||||
iteration: 1
|
||||
iteration: 2
|
||||
iteration: 3
|
||||
iteration: 4
|
||||
async done
|
||||
iteration: 5
|
||||
'''
|
||||
"""
|
||||
|
||||
import asyncdispatch, times
|
||||
|
||||
var done = false
|
||||
proc somethingAsync() {.async.} =
|
||||
yield sleepAsync 5000
|
||||
echo "async done"
|
||||
done = true
|
||||
|
||||
asyncCheck somethingAsync()
|
||||
var count = 0
|
||||
while not done:
|
||||
count += 1
|
||||
drain 1000
|
||||
echo "iteration: ", count
|
||||
Reference in New Issue
Block a user