Implementing a Thread Safe Message Queue in C#