I'm confused by this api. If I'm understanding correctly, you'll always need to call isValid() after calling select().  If so, why not just pass the callback as an optional second argumetn to select()?