Retry method execution on failure?
How hard is this to scale?
Sorry but I don't understand what do you mean here. How do you want to scale a method?
What are the downsides to this method?

It does not work with Action

It does not work with Func&lt;T1, T2, TResult&gt;

It does not work with Func&lt;Task&gt;

It does not work with Func&lt;Task&lt;T&gt;&gt;

It blocks the calling thread unnecessary (Thread.Sleep)

You must throw exception to enforce retry (can't use any other condition, like Result != true)

It swallows the exception

in the worst case if all attempts fail then it will return a default instead of the exception


It does not allow to use exponential back-off algorithm

It does not allow infinite retry (performing yet another attempt until it succeeds)

It does not utilize Cancellation concept

It does not provide debug information (like how many times the retry has been performed)


What alternatives are available?

Polly's Retry &lt;&lt; The suggested
EnterpriseLibrary.TransientFaultHandling.Core

Is this code easy to understand?
For me, yes.
Not only in final usage, but initial implementation?
Is this a question?
What would a more concise and clear name be for this method?

ExecuteWithRetry
ExecuteAtMostNTimes
RetryFunction
PerformCallWithRetryPolicy
etc.