Isn't the usual way to do this is to just pass down a "timeout" parameter and have the method take care of time limiting itself? That always seemed to work well for me. (And APIs provide such an interface if they have long-running blocking methods)