import asyncdispatch

proc task() {.async.} =
  const tSleep = 40
  await sleepAsync(tSleep)

proc main() =
  var counter = 0
  var f = task()
  while not f.finished:
    inc(counter)
    poll(10)

  const slack = 1
    # because there is overhead in `async` + `sleepAsync`
    # as can be seen by increasing `tSleep` from 40 to 49, which increases the number
    # of failures.
  doAssert counter <= 4 + slack

for i in 0 .. 4: main()
