def together
      old = Thread.current.eldritch_group

      group = Group.new
      Thread.current.eldritch_group = group

      yield group

      group.join_all
      Thread.current.eldritch_group = old
    end
def together
      old = Thread.current.eldritch_group

      group = Group.new
      Thread.current.eldritch_group = group

      yield group

      group.join_all
      Thread.current.eldritch_group = old
    end
Creates a group of async call and blocks

 When async blocks and calls are inside a together block, they can act as a group.

 A together block waits for all the async call/blocks that were started within itself to stop before continuing.

   together do
     5.times do
       async { sleep(1) }
     end
   end
   # waits for all 5 async blocks to complete

 A together block will also yield a {Group}. This can be used to interact with the other async calls/blocks.

   together do |group|
     5.times do
       async do
         # stop everyone else
         group.interrupt if something?
       end
     end
   end

 @yield [Group] group of async blocks/calls
 @see Group Group class