The TryCatchRetry.RunWithDelayAsync(..) methods seem to work incorrectly because of the first argument - being Task or IAsyncOperation.
This line
await task;
doesn't actually re-run the task. It will always return the faulted task, so that whole purpose of the TryCatchRetry logic is lost.
Instead of receiving a Task argument, we should take a Func<Task> as the first argument.
Am I getting it wrong?