IRONSOFTWAREHOME
GELIŞTIRICI GÜNCELLEMELERI

Polly Retry (Geliştiriciler İçin Nasıl Çalışır)

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Jacob Mellor
Updated: 21 Nisan 2026

Geçici hataları, zaman aşımını ve istisnaları zarifçe yönetmek, sağlam ve dirençli uygulamalar oluştururken kritiktir. Polly, direnç ve geçici hata yönetimi yetenekleri sağlayan popüler bir .NET kütüphanesidir. Birçok özelliği arasında "yeniden deneme" en yaygın kullanılan politikalardan biridir.

Bu makalede, C#'ta Polly'nin tekrar deneme politikasına dalacağız, kullanımını, yapılandırma seçeneklerini keşfedeceğiz ve pratik kod örnekleri sunacağız. Ayrıca, form istek sonuçlarının PDF'ini oluşturmak için Polly Yeniden Deneme girişimi ile IronPDF Kütüphanesini PDF Oluşturma işlemiyle kullanacağız.

Polly Yeniden Deneme Nedir?

Polly Yeniden Deneme, Polly kütüphanesi tarafından sağlanan ve geliştiricilerin hatalar veya geçici arızalar nedeniyle başarısız olabilecek işlemleri otomatik olarak yeniden denemelerine olanak tanıyan bir politikadır. Geçici hata, ağ aksaklıkları, hizmet kullanılabilirliği veya diğer geçici sorunlar nedeniyle meydana gelen geçici hatalardır.

Polly'nin yeniden deneme politikası ile, maksimum yeniden deneme sayısı, birden fazla yeniden deneme arasındaki gecikme ve başarısız bir isteği yeniden denemek için koşullar dahil olmak üzere yeniden deneme işlemlerini tanımlayabilirsiniz. Bu, geçici hatalardan sık sık kurtarılan sağlam uygulamalar oluşturulmasına yardımcı olur ve son kullanıcılar için çökme veya kesinti olmadan eski haline getirir.

Polly Yeniden Denemeye Başlarken

Kod örneklerine dalmadan önce, bir C# projesinde Polly'yi nasıl kuracağınız ve yapılandıracağınız hakkında temel bir anlayış oluşturalım.

Polly Kurulumu

NuGet Paket Yöneticisi Konsolu aracılığıyla Polly'yi aşağıdaki komutla kurabilirsiniz:

PM > Install-Package Polly

.NET CLI üzerinden:

dotnet add package Polly

Polly'i kullanma deyimleri eklemek

C# dosyanıza Polly ad alanını ekleyin:

using Polly;

Temel Yeniden Deneme Politikası Örneği

Uzak bir hizmetten veri alma işlemini simüle eden bir işlemi yeniden denediğimiz basit bir örnekle başlayalım. Azami 3 yeniden deneme ile sabit zaman aşımı gecikmesi olarak 2 saniye olan bir yeniden deneme politikası kuracağız.

using System;
using System.Net.Http;
using Polly;

namespace PollyRetryExample
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // Define a retry policy that handles HttpRequestException with a maximum of 3 retries
            var retryPolicy = Policy
                .Handle<HttpRequestException>() // Specify the exception type to handle
                .WaitAndRetry(
                    3, // Max retry attempts
                    retryAttempt => TimeSpan.FromSeconds(2), // Fixed retry delay
                    (exception, timeSpan, retryCount, context) =>
                    {
                        Console.WriteLine("Retry {0} due to {1}", retryCount, exception.Message);
                    });

            try
            {
                // Execute the action within the context of the retry policy
                retryPolicy.Execute(() =>
                {
                    FetchDataFromRemoteService();
                });
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed after 3 retries: {0}", ex.Message);
            }
        }

        // Simulate fetching data that throws HttpRequestException
        public static void FetchDataFromRemoteService()
        {
            throw new HttpRequestException("Failed to fetch data from remote service");
        }
    }
}

Bu örnekte:

  • Handle<HttpRequestException>(), HttpRequestException adresini ele almak ve meydana gelirse işlemi tekrar denemek istediğimizi belirtir.
  • WaitAndRetry(), yeniden deneme politikasını 3 deneme ve denemeler arasında 2 saniyelik sabit bir gecikme ile (belirtilen maksimum süre) yapılandırır.
  • onRetry delege, bir yeniden deneme meydana geldiğinde bir mesaj kaydeder.

Polly Tekrar Deneme (Geliştiriciler İçin Nasıl Çalışır): Şekil 1

Gelişmiş Yeniden Deneme Politikası Yapılandırması

Üstel Bekleme

Üstel geri çekilme, istekler ve yeniden denemeler arasındaki gecikmenin üstel olarak arttığı popüler bir yeniden deneme stratejisidir. Polly, WaitAndRetry() kullanarak üstel geri çekilmeyi uygulamak için uygun bir yol sağlar.

var retryPolicy = Policy
    .Handle<HttpRequestException>()
    .WaitAndRetry(
        retryCount: 3, // Max retry attempts
        sleepDurationProvider: attempt => TimeSpan.FromSeconds(Math.Pow(2, attempt)), // Exponential delay
        onRetry: (exception, timeSpan, retryCount, context) =>
        {
            Console.WriteLine($"Retry {retryCount} due to {exception.Message}");
        });

Polly Tekrar Deneme (Geliştiriciler İçin Nasıl Çalışır): Şekil 2

Elektrik Devresiyle Yeniden Deneme

Yeniden denemeyi bir devre kesici ile birleştirmek, servis sürekli başarısız olduğunda tekrarlanan denemeleri önleyerek direnci daha da artırabilir. Polly, yeniden deneme ve devre kesici politikalarını kolayca birleştirmenize izin verir.

// Define a circuit breaker policy
var circuitBreakerPolicy = Policy
    .Handle<HttpRequestException>()
    .CircuitBreaker(
        exceptionsAllowedBeforeBreaking: 3, // Number of exceptions before breaking
        durationOfBreak: TimeSpan.FromSeconds(30), // Time circuit stays open
        onBreak: (ex, breakDelay) =>
        {
            Console.WriteLine($"Circuit broken due to {ex.Message}. Retry after {breakDelay.TotalSeconds} seconds.");
        },
        onReset: () =>
        {
            Console.WriteLine("Circuit reset.");
        });

// Define a retry policy
var retryPolicy = Policy
    .Handle<HttpRequestException>()
    .WaitAndRetry(
        retryCount: 3, // Max retry attempts
        sleepDurationProvider: attempt => TimeSpan.FromSeconds(2), // Fixed retry delay
        onRetry: (exception, timeSpan, retryCount, context) =>
        {
            Console.WriteLine($"Retry {retryCount} due to {exception.Message}");
        });

// Combine both policies into a single policy wrap
var policyWrap = Policy.Wrap(circuitBreakerPolicy, retryPolicy);

Bu örnekte:

  • CircuitBreaker(), 3 istisnadan sonra kırılan ve 30 saniye açık kalan bir devre kesici politikasını tanımlar.
  • Policy.Wrap(), devre kesici ve yeniden deneme politikalarını tek bir politika olarak birleştirir.

Polly Tekrar Deneme (Geliştiriciler İçin Nasıl Çalışır): Şekil 3

IronPDF'ye Giriş

IronPDF C# PDF Kütüphanesi Genel Bakış, geliştiricilerin .NET uygulamaları içinde PDF belgelerini oluşturup, düzenlemelerine ve manipüle etmelerine olanak tanıyan güçlü bir C# kütüphanesidir. Faturalar, raporlar ya da herhangi bir tür PDF belgesi oluşturmanız gerekse de, IronPDF süreci kolaylaştıran sezgisel bir API sunar.

IronPDF ile, HTML, CSS ve hatta ASP.NET web sayfalarını PDF'ye kolayca dönüştürebilirsiniz, bu da onu geniş bir yelpazedeki uygulamalar için çok yönlü bir araç haline getirir. Ayrıca, PDF'lere metin, görsel ve etkileşimli öğeler ekleme ve bunları şifreleme ve dijital imzalarla güvence altına alma gibi gelişmiş özellikler sunar.

IronPDF, orijinal düzenlerin ve stillerin hassas bir şekilde korunmasını sağlayarak HTML'den PDF'ye dönüşümde mükemmeldir. Raporlar, faturalar ve dökümantasyon gibi web tabanlı içeriklerden PDF üretimi için mükemmeldir. IronPDF, HTML dosyalarından, URL'lerden ve ham HTML dizelerinden yüksek kaliteli PDF dosyalarına dönüşümü destekler.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

IronPDF ile Polly Yeniden Deneme

IronPDF ile çalışırken, bazen PDF oluşturmadan önce dış kaynaklardan veri almanız veya karmaşık işlemler yapmanız gerekebilir.

Bu tür durumlarda, geçici hatalar veya geçici sorunlar ile karşılaşabilir, bu da PDF oluşturma hatalarına yol açabilir. Bu geçici hataları zarifçe ele almak için, IronPDF ile birlikte Polly Yeniden Denemeyi kullanabilirsiniz.

IronPDF ve Polly Kurulumu

Başlamadan önce, projenizde IronPDF NuGet paketini kurduğunuzdan emin olun.

PM > Install-Package IronPdf

IronPDF ile Polly Yeniden Denemeyi Kullanmak

IronPDF kullanarak PDF oluştururken geçici hataları ele almak için Polly Yeniden Denemesini nasıl kullanacağımız üzerine bir örneğe bakalım. Aşağıdaki örnekte, bir dış API'den veri almayı ve ardından bu verilere dayalı olarak PDF oluşturmayı simüle edeceğiz. Başarısızlık durumunda veri alma operasyonunu gerçekleştirmek için Polly Retry kullanılacaktır.

using System;
using System.Net.Http;
using System.Threading.Tasks;
using IronPdf;
using Polly;

namespace IronPdfWithPollyRetry
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            // Define a retry policy with async capability
            var retryPolicy = Policy
                .Handle<HttpRequestException>() // Specify exception type to handle
                .WaitAndRetryAsync(
                    3, // Retry attempts
                    retryAttempt => TimeSpan.FromSeconds(2), // Calculated retry delay
                    (exception, timeSpan, retryCount, context) =>
                    {
                        Console.WriteLine("Retry " + retryCount + " due to " + exception.Message);
                    });

            // Execute the retry policy asynchronously
            var pdf = await retryPolicy.ExecuteAsync(async () =>
            {
                var data = await FetchDataFromExternalApiAsync(); // Fetch data from an external source
                return GeneratePdfFromData(data); // Generate PDF using fetched data
            });

            pdf.SaveAs("GeneratedDocument.pdf");
        }

        // Simulate fetching data from an external API
        static async Task<string> FetchDataFromExternalApiAsync()
        {
            await Task.Delay(100); // Simulate delay
            throw new HttpRequestException("Failed to fetch data from external API");
        }

        // Generate PDF using IronPDF based on the fetched data
        static PdfDocument GeneratePdfFromData(string data)
        {
            var htmlContent = "<html><body><h1>Data: " + data + "</h1></body></html>";
            var renderer = new ChromePdfRenderer();
            return renderer.RenderHtmlAsPdf(htmlContent);
        }
    }
}

Bu C# kodu, IronPDF ile bir PDF belgesi oluşturma için yeniden deneme politikalarını uygulamak üzere Polly kütüphanesini nasıl kullanacağınızı göstermektedir. Main yöntemi, Polly'nin WaitAndRetryAsync yöntemini kullanarak bir yeniden deneme politikasını başlatır.

Bu politika, HttpRequestException adresini ele alması ve başlangıç denemesi ile denemeler arasında 2 saniye gecikme ile işlemi 3 kereye kadar tekrar denemesi gerektiğini belirtir. Bir yeniden deneme hatası meydana gelirse, konsola bir mesaj yazılır ve yeniden deneme numarası ve istisna mesajı belirtilir.

Main yöntemi içinde, yeniden deneme politikası mantığı retryPolicy.ExecuteAsync() kullanılarak asenkron olarak icra edilir. Bu icra sırasında, iki asenkron operasyon birlikte zincirlenir: FetchDataFromExternalApiAsync() ve GeneratePdfFromData(data).

Eğer FetchDataFromExternalApiAsync() başarısız olursa (simüle edilmiş bir istisna ile kasıtlı olarak ayarlandığı gibi), yeniden deneme politikası HttpRequestException yakalayacak, yeniden deneme girişimini kaydedecek ve işlemi tekrar deneyecektir.

FetchDataFromExternalApiAsync() yöntemi, bir dış API'dan veri almayı simüle eder ve kasıtlı olarak başarısız istekleri simüle etmek için HttpRequestException atar.

Polly Tekrar Deneme (Geliştiriciler İçin Nasıl Çalışır): Şekil 4

Sonuç

Sonuç olarak, Polly'nin yeniden deneme politikası geçici hataları ele almak ve C# uygulamalarında sağlamlık sağlamak için paha biçilmezdir. Yeniden deneme girişimlerini, gecikmelerini ve koşullarını konfigüre etmekteki esnekliği, geliştiricilerin belirli gereksinimlere yönelik dirençli stratejiler denemelerini sağlar.

IronPDF gibi kütüphanelerle bağımsız veya birlikte kullanıldığında, Polly, uygulamalarının geçici hatalardan zarif bir şekilde kurtulmasına ve kullanıcı deneyimi ile yazılımın güvenilirliğini artırmasına yardımcı olur.

Polly'nin yeniden deneme yeteneklerini entegre ederek, geliştiriciler, geçici sorunlardan kurtulabilen ve adapte edilebilen daha dirençli sistemler inşa edebilir, böylece uygulamalarının genel kalite ve güvenilirliğini artırır.

IronPDF piyasadaki en iyi C# PDF kütüphanesidir, ayrıca bir IronPDF için deneme lisansı sağlar, fiyatlar $999 USD'den başlamaktadır.

IronPDF kullanarak HTML'den PDF'ye dönüşüm hakkında bilgi almak için şu IronPDF HTML'den PDF'ye Dönüşüm Eğitimi'ni ziyaret edin.

Jacob Mellor, Teknoloji Direktörü @ Team Iron
Teknoloji Direktörü

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez