Fix block messages were being discarded

From Vegard Berget: Thanks for pointing this out.
Change the TryAdd to a blocking Add command and used a cancellation
token within the dispose method to unblock and escape early on dispose.