private bool Pull() { while (! IsFinished && ! HasError) { DoPull (); if (chars_to_pull >= 0 && chars_added >= chars_to_pull) { chars_added = 0; break; } } if (IsFinished || HasError) return false; return true; }