StopService would halt on that await until StopAsync returned, but it must not be so because the OnMessage is firing after the dispose methods. So... something isn't right. I can probably turn StopAsync synchronous but I'd rather figure out WTF is going on here.