I don't think this is not the right place to do error handling.  The tasks functions should just attempt to do what the caller wants, if something bad happens (like the package could not be installed), the task function should just throw an error.  The caller can handle the error if he wants.  The reason I think we should prefer exceptions over result checking is, what if the caller that cares about the result is 5 frames up the stack?  Then he has to pass that expected result down through 5 different function calls.