Can you change this so that the thread is created inside the listener object?  It's the listener's responsibility to make the `start_listening` method async.  Also it will make managing the threads easier in the future.