execute
Tries each provider in priority order, returning the result of the first one that succeeds.
A provider is skipped without being invoked if its circuit breaker is currently open. A provider that is invoked and fails has its own circuit breaker record the failure (so it may trip open for subsequent calls), and execute moves on to the next provider.
Throws
if every provider was skipped or failed