only call cargo.drain once each time it's drained

Without this, cargo.drain was often called multiple times after the last task returned.