Actions with retries

private static void DoWithRetries(Action action, 
                                  int tryCount = 3, 
                                  string addMessage = "")
{
    bool success = false;
    int tryIndex = 0;

    do
    {
        try
        {
            action();
            success = true;
        }
        catch (Exception ex)
        {
            tryIndex++;

            // any sort of logging
            Console.WriteLine($"Operation [{addMessage}] failed. Attempt nr. [{tryIndex}]. Exception: [{ex.Message}]");

            if (tryIndex >= tryCount)
                throw;
        }
    } while (!success);
}

Usage example:

DoWithRetries(() =>
{
    if (rng.Next(0, 3) > 0) // 33%
    {
        throw new Exception("random exception");
    }
    Console.WriteLine("Operation finished successfully");
}, 5, "Random Exception Thrower");

Result:

Operation [Random Exception Thrower] failed. Attempt nr. [1]. Exception: [random exception]
Operation [Random Exception Thrower] failed. Attempt nr. [2]. Exception: [random exception]
Operation finished successfully