mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-08 14:03:23 +00:00
async all() now immediately completes if arg is empty
This commit is contained in:
@@ -246,6 +246,7 @@ proc `or`*[T, Y](fut1: Future[T], fut2: Future[Y]): Future[void] =
|
||||
proc all*[T](futs: varargs[Future[T]]): auto =
|
||||
## Returns a future which will complete once
|
||||
## all futures in ``futs`` complete.
|
||||
## If the argument is empty, the returned future completes immediately.
|
||||
##
|
||||
## If the awaited futures are not ``Future[void]``, the returned future
|
||||
## will hold the values of all awaited futures in a sequence.
|
||||
@@ -270,6 +271,9 @@ proc all*[T](futs: varargs[Future[T]]): auto =
|
||||
if completedFutures == totalFutures:
|
||||
retFuture.complete()
|
||||
|
||||
if totalFutures == 0:
|
||||
retFuture.complete()
|
||||
|
||||
return retFuture
|
||||
|
||||
else:
|
||||
@@ -292,4 +296,7 @@ proc all*[T](futs: varargs[Future[T]]): auto =
|
||||
|
||||
setCallback(i)
|
||||
|
||||
if retValues.len == 0:
|
||||
retFuture.complete(retValues)
|
||||
|
||||
return retFuture
|
||||
|
||||
@@ -66,3 +66,12 @@ block:
|
||||
|
||||
doAssert execTime * 100 < taskCount * sleepDuration
|
||||
doAssert results == expected
|
||||
|
||||
block:
|
||||
let
|
||||
noIntFuturesFut = all(newSeq[Future[int]]())
|
||||
noVoidFuturesFut = all(newSeq[Future[void]]())
|
||||
|
||||
doAssert noIntFuturesFut.finished and not noIntFuturesFut.failed
|
||||
doAssert noVoidFuturesFut.finished and not noVoidFuturesFut.failed
|
||||
doAssert noIntFuturesFut.read() == @[]
|
||||
|
||||
Reference in New Issue
Block a user