Figured out a way to ensure the subscriber has started listening by the time this function returns, and it involved no busy-waiting:

```ruby
require 'queue'
require 'redis'
client = Redis::Redis.new

def start(client)
    queue = Queue.new
    thread = Thread.new do
        Redis::Redis.new(url: client.id).subscribe('foo') do |on|
            # Let the spawning thread know that we're subscribed
            on.subscribe do |channel, message|
                puts 'Subscribed!'
                queue.push(true)
            end

            # Listen for messages as usual
            on.message do |channel, message|
                puts "Message: #{channel} - #{message}"
            end
        end
    end

    puts 'Waiting for thread to be listening'
    queue.pop
    puts 'I know the other thread is now listening'
end
```