1. StartListening should block until it reads its first config, then continue asynchronously
2. Does not refresh cluster topology
3. Does not handle case when stream is dropped and no servers are available.
4. Task.Run is an improper method to use for fire-and-forget background work (occupies a ThreadPool thread, potentially throws TaskScheduler.UnobservedTaskException