based on my last comment, in order to break out of this write if someone other goroutine called `Stop()` we can:

```go
select {
case this.MessageChan <- msg:
case this.exitChan:
    err = errors.New("exiting")
}
```