Suspend execution until a collection of fibers are finished.
The wait group is a declarative counter of how many concurrent fibers have been started. Each such fiber is expected to call #done to report that they are finished doing their work. Whenever the counter reaches zero the waiters will be resumed.
This is a simpler and more efficient alternative to using a Channel(Nil) then looping a number of times until we received N messages to resume execution.
Basic example:
require "wait_group"
wg = WaitGroup.new(5)
5.times do
spawn do
do_something
ensure
wg.done # the fiber has finished
end
end
# suspend the current fiber until the 5 fibers are done
wg.wait Yields a WaitGroup instance and waits at the end of the block for all of the work enqueued inside it to complete.
Increments the counter by how many fibers we want to wait for.
Decrements the counter by one.
Increment the counter by 1, perform the work inside the block in a separate fiber, decrementing the counter after it completes or raises.
Suspends the current fiber until the counter reaches zero, at which point the fiber will be resumed.
Reference
Reference
Reference
Object
Object
Object
Yields a WaitGroup instance and waits at the end of the block for all of the work enqueued inside it to complete.
WaitGroup.wait do |wg|
items.each do |item|
wg.spawn { process item }
end
end Increments the counter by how many fibers we want to wait for.
A negative value decrements the counter. When the counter reaches zero, all waiting fibers will be resumed. Raises RuntimeError if the counter reaches a negative value.
Can be called at any time, allowing concurrent fibers to add more fibers to wait for, but they must always do so before calling #done that would decrement the counter, to make sure that the counter may never inadvertently reach zero before all fibers are done.
Decrements the counter by one. Must be called by concurrent fibers once they have finished processing. When the counter reaches zero, all waiting fibers will be resumed.
Increment the counter by 1, perform the work inside the block in a separate fiber, decrementing the counter after it completes or raises. Returns the Fiber that was spawned.
wg = WaitGroup.new
wg.spawn { do_something }
wg.wait Suspends the current fiber until the counter reaches zero, at which point the fiber will be resumed.
Can be called from different fibers.
© 2012–2026 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/1.19.0/WaitGroup.html