比如調(diào)用第三方 API 時(shí),如果返回超時(shí)或連接異常,可以通過(guò) Polly 自動(dòng)重試,避免用戶體驗(yàn)受到影響。

指數(shù)后退(Exponential Backoff)

指數(shù)后退是 Polly 提供的一種高級(jí)重試策略。每次重試之間的延遲時(shí)間呈指數(shù)增長(zhǎng),可以有效防止過(guò)于頻繁的重試導(dǎo)致系統(tǒng)壓力增加。

代碼示例:指數(shù)后退策略

var retryPolicy = Policy
    .Handle()
    .WaitAndRetry(
        retryCount: 3,
        sleepDurationProvider: attempt => TimeSpan.FromSeconds(Math.Pow(2, attempt)),
        onRetry: (exception, retryCount, context) =>
        {
            Console.WriteLine($"Retry {retryCount} due to {exception.Message}");
        });

相關(guān)圖片鏈接:

斷路器策略(Circuit Breaker)

斷路器策略可以在服務(wù)持續(xù)失敗時(shí)暫時(shí)停止請(qǐng)求,避免系統(tǒng)資源被耗盡。

代碼示例:重試與斷路器的組合

var circuitBreakerPolicy = Policy
    .Handle()
    .CircuitBreaker(
        exceptionsAllowedBeforeBreaking: 3,
        durationOfBreak: TimeSpan.FromSeconds(30),
        onBreak: (ex, breakDelay) =>
        {
            Console.WriteLine($"Circuit broken due to {ex.Message}");
        },
        onReset: () =>
        {
            Console.WriteLine("Circuit reset.");
        });

var policyWrap = Policy.Wrap(retryPolicy, circuitBreakerPolicy);

相關(guān)圖片鏈接:

IronPDF 與 Polly 的結(jié)合使用

IronPDF 是一個(gè)功能強(qiáng)大的 .NET PDF 庫(kù),支持將 HTML、CSS 轉(zhuǎn)換為 PDF 文件。結(jié)合 Polly,可以優(yōu)雅地處理在生成 PDF 過(guò)程中可能出現(xiàn)的瞬態(tài)故障。

安裝 IronPDF 和 Polly

在項(xiàng)目中使用以下命令安裝 IronPDF 和 Polly:

Install-Package IronPdf
Install-Package Polly

示例:使用 Polly 重試生成 PDF

以下代碼展示了如何模擬從 API 獲取數(shù)據(jù),并在生成 PDF 時(shí)處理瞬時(shí)故障。

代碼示例:


using IronPdf;
using Polly;

var retryPolicy = Policy
    .Handle()
    .WaitAndRetryAsync(
        3,
        retryAttempt => TimeSpan.FromSeconds(2),
        (exception, retryCount, context) =>
        {
            Console.WriteLine($"Retry {retryCount} due to {exception.Message}");
        });

var pdf = await retryPolicy.ExecuteAsync(async () =>
{
    var data = await FetchDataFromExternalApiAsync();
    return GeneratePdfFromData(data);
});

pdf.SaveAs("GeneratedDocument.pdf");

static async Task FetchDataFromExternalApiAsync()
{
    // 模擬外部 API 數(shù)據(jù)獲取
    await Task.Delay(100);
    throw new HttpRequestException("Failed to fetch data");
}

static PdfDocument GeneratePdfFromData(string data)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf($

上一篇:

Siri 的 API Key:全面指南及應(yīng)用

下一篇:

Cohere模型名稱:探索新一代AI模型的力量
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)