#!/usr/bin/env ruby require "async" request = ::Thread::Queue.new thread = Thread.new do while true sleep 10 IO.pipe do |r, w| request.push(w) puts r.read end end end Async do |task| task.async do while w = request.pop task.print_hierarchy(w) w.close end end task.annotate("Main Task") while true sleep 1 puts "Main Task" end end thread.join