Producer/consumer implementation using Tasks and BlockingCollections
Did you know that Task.Result blocks? Your code isn't asynchronous at all - and it can't be unless DoRead is.

Effectively your code is starting a new task and then blocking while it completes - there's no benefit to starting the task at all! 

As a small aside, Task.Run is easier than using Task.Factory.StartNew.

If I were you, I'd just remove the Task.