I was running into this same issue. The channel was filling up and the reader was stuck. In fact, I came back to this SO thread several times hoping someone had an idea. I finally realized the logic immediately following the read operation (within the read loop) was blocking the next read. In your particular example, I would ensure the logging and DoSomethingAsync is not blocking.