एक JIRA टिकट है CSHARP-1018 इस मुद्दे को ट्रैक करने के लिए। मूल रूप से ड्राइवर टाइमआउट विकल्प को अनदेखा कर देता है जब मशीन पहुंच योग्य नहीं होती है। यदि मशीन बंद है या पहुंच योग्य नहीं है तो टाइमआउट विकल्प को अनदेखा कर दिया जाता है।
कृपया इस मुद्दे पर प्रगति का पालन करने के लिए जिरा टिकट देखें।
CSHARP-1231 पर पोस्ट किया गया समाधान देखें इस तरह से कि ServerSelectionTimeout को ड्राइवर के वर्तमान 2.0.0 संस्करण में सेट किया जा सकता है यदि आप विशिष्ट संचालन पर कम टाइमआउट का उपयोग करने के लिए उस दृष्टिकोण को पसंद करते हैं।
यदि आप नए 2.0 async API का उपयोग कर रहे हैं, तो आप अपने स्वयं के टाइमआउट को संपूर्ण संचालन पर लागू करने के लिए रद्दीकरण टोकन का उपयोग कर सकते हैं।
तो मैं पिछली टिप्पणी में रद्दीकरण टोकन दृष्टिकोण की अनुशंसा करता हूं। छोटे सर्वर चयन टाइमआउट का उपयोग करने से प्रतिकृति सेट चुनावों के दौरान नकली अपवाद हो सकते हैं यदि सर्वर चयन टाइमआउट चुनाव को पूरा करने में लगने वाले समय से कम है।
आप कुछ इस तरह लिख सकते हैं:
var startTime = DateTime.UtcNow;
try
{
using (var timeoutCancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(500)))
{
await collection.Find("{ _id : 1 }").ToListAsync(timeoutCancellationTokenSource.Token);
}
}
catch (OperationCanceledException ex)
{
var endTime = DateTime.UtcNow;
var elapsed = endTime - startTime;
Console.WriteLine("Operation was cancelled after {0} seconds.", elapsed.TotalSeconds);
}
इस उदाहरण में, भले ही ServerSelectionTimeout
अभी भी 30 सेकंड का डिफ़ॉल्ट मान है, यह विशेष ऑपरेशन केवल 500 मिलीसेकंड के बाद रद्द कर दिया जाएगा (लगभग, रद्द करने में कभी-कभी थोड़ा अधिक समय लग सकता है)।