For 1 you can run the call in a separate workflow with wfToken = workflow.execute(). From there you can check after a timeout if the token has a finished state, if not you can cancel the workflow programatically. If you need I can provide a workflow doing something similar.
For 2 there must be a method / property somewhere easy to test enough to exclude the non responding vCenter host from the loop. I will let other people comment on that if they have experience with this.