I was also bothered by the pipeline being blocked by the slowest task. Your recommendation is to just use a thread pool? The pipeline abstraction is very comfortable and simplifies architecture. Thread pools / executors less so