जैसा कि मैं आपके अपवाद संदेश से देख सकता हूं, आपके पास यातायात के लिए आपकी न्यूनतम कार्यकर्ता प्रक्रिया संख्या बहुत कम है।
<ब्लॉकक्वॉट>कार्यकर्ता:(व्यस्त=10,निशुल्क=32757,न्यूनतम=2,अधिकतम=32767)
जब यह अपवाद हुआ था, तब आपके पास 10 व्यस्त वर्कर थ्रेड थे, जबकि शुरुआत के लिए आपके पास 2 वर्कर थ्रेड थे।
जब आपका एप्लिकेशन किसी ऑपरेशन को पूरा करने के लिए उपलब्ध थ्रेड्स से बाहर हो जाता है, तो .NET एक नया शुरू करता है (अधिकतम मूल्य तक, निश्चित रूप से)। और यह देखने के लिए थोड़ा इंतजार करता है कि अतिरिक्त कार्यकर्ता धागे की आवश्यकता है या नहीं। यदि आपके एप्लिकेशन को अभी भी वर्कर थ्रेड्स की आवश्यकता है, तो .NET एक और शुरू करता है। फिर दूसरा, फिर दूसरा... लेकिन इसके लिए समय चाहिए। यह 0 एमएस में नहीं होता है। आपका अपवाद संदेश देखकर, हम देख सकते हैं कि .NET ने 8 अतिरिक्त वर्कर थ्रेड (10 - 2 =8) बनाए थे। निर्माण प्रक्रिया के दौरान, इस विशेष रेडिस ऑपरेशन ने प्रतीक्षा की और अंततः समय समाप्त हो गया।
आप ThreadPool.SetMinThreads(Int32, Int32)
का उपयोग कर सकते हैं न्यूनतम थ्रेड गिनती सेट करने के लिए आपके आवेदन की शुरुआत में विधि। मेरा सुझाव है कि आप ThreadPool.SetMinThreads(10, 10)
से शुरुआत करें। और जैसे ही आप इसका परीक्षण करते हैं, उसमें बदलाव करें।
अतिरिक्त पढ़ें:
https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadpool.setminthreadshttps://stackexchange.github.io/StackExchange.Redis/Timeouts.html