
Phenaki API 價格:探索最新技術與市場趨勢
比如調用第三方 API 時,如果返回超時或連接異常,可以通過 Polly 自動重試,避免用戶體驗受到影響。
指數后退是 Polly 提供的一種高級重試策略。每次重試之間的延遲時間呈指數增長,可以有效防止過于頻繁的重試導致系統壓力增加。
代碼示例:指數后退策略
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}");
});
相關圖片鏈接:
斷路器策略可以在服務持續失敗時暫時停止請求,避免系統資源被耗盡。
代碼示例:重試與斷路器的組合
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);
相關圖片鏈接:
IronPDF 是一個功能強大的 .NET PDF 庫,支持將 HTML、CSS 轉換為 PDF 文件。結合 Polly,可以優雅地處理在生成 PDF 過程中可能出現的瞬態故障。
在項目中使用以下命令安裝 IronPDF 和 Polly:
Install-Package IronPdf
Install-Package Polly
以下代碼展示了如何模擬從 API 獲取數據,并在生成 PDF 時處理瞬時故障。
代碼示例:
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 數據獲取
await Task.Delay(100);
throw new HttpRequestException("Failed to fetch data");
}
static PdfDocument GeneratePdfFromData(string data)
{
var renderer = new ChromePdfRenderer();
return renderer.RenderHtmlAsPdf($