class Async::Semaphore
def async(*arguments, parent: (@parent or Task.current), **options)
def async(*arguments, parent: (@parent or Task.current), **options) wait parent.async(**options) do |task| @count += 1 begin yield task, *arguments ensure self.release end end end