मैं थ्रॉटल डॉक्यूमेंट डीबी क्लाइंट कॉल्स के लिए बहुत वर्बोज़ रीट्री लॉजिक लिख रहा हूं।डॉक्यूमेंटडीबी ट्रांजिएंटफॉल्ट हैंडलिंग बेस्ट प्रैक्टिस
नीचे दिए गए उदाहरण 10 पुनः प्रयासों के साथ इसका एक आम उदाहरण है।
मेरा प्रश्न दो गुना है: क्या यह सबसे अच्छा अभ्यास है, और क्या इसे संभालने के लिए कम वर्बोज़ तरीका है? मुझे लगता है कि माइक्रोसॉफ्ट.एज़ुर.डॉर्ड्स.क्लिएंट। ट्रांसिएंटफॉल्ट हैंडलिंग न्यूजेट पैकेज जो कम कोड के साथ एक ही परिणाम प्राप्त करने वाला है, लेकिन मुझे स्टैक ओवरफ्लो या Google पर कोई उदाहरण नहीं मिल रहा है और ऐसा कोई स्पष्ट प्रतीत नहीं होता है माइक्रोसॉफ्ट से उपलब्ध दस्तावेज।
int maxRetryAttempts = 10;
while (maxRetryAttempts > 0)
{
try
{
// Attempt to call DocumentDB Method
// ---[DocumentDB Method Here]---
}
catch (DocumentClientException de)
{
if (de.StatusCode.HasValue)
{
var statusCode = (int)de.StatusCode;
if (statusCode == 429 || statusCode == 503)
{
//Sleep for retry amount
Thread.Sleep(de.RetryAfter);
//Decrement max retry attempts
maxRetryAttempts--;
}
}
}
catch (AggregateException ae)
{
foreach (Exception ex in ae.InnerExceptions)
{
if (ex is DocumentClientException)
{
var documentClientException = ex as DocumentClientException;
var statusCode = (int)documentClientException.StatusCode;
if (statusCode == 429 || statusCode == 503)
{
//Sleep for retry amount
Thread.Sleep(documentClientException.RetryAfter);
//Decrement max retry attempts
maxRetryAttempts--;
}
else
{
throw;
}
}
}
}
}
if (maxRetryAttempts < 0)
{
//Max retry attempts reached
}
में आपका 'कैच' ब्लॉक, 'एग्रीगेट एक्सेप्शन' को अनचाहे करते समय, आप चुपचाप सभी गैर-'दस्तावेज़ क्लाइंट अपवाद' अपवादों को त्याग देते हैं। क्या यह जानबूझकर है? मैं अज्ञात अपवादों को बुलबुला करने की उम्मीद करता। –