Merge pull request #4989 from endragor/empty-async-all

async all() now immediately completes if arg is empty
This commit is contained in:
Andreas Rumpf 2016-11-03 10:54:19 +01:00 • committed by GitHub
commit ee8c1c6f93
2 changed files with 16 additions and 0 deletions

View file

@ -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