2015-01-29 7 views
6

मैं जहां मैं अपने आधार नियंत्रक के OnActionExecuting() विधि ओवरराइड मेरी धागा संस्कृति स्थापित करने के लिए एक MVC अनुप्रयोग है अगर हम थ्रेड पूल में संशोधित हैं, तो थ्रेड पूल में संशोधित किया गया है, और एक नया धागा भेजा जाता है जब एसिंक कार्य पूरा हो जाता है? मुझे कोई गठिया पता होना चाहिए?Asynchrony और धागा संस्कृति

+0

क्या उस थ्रेड द्वारा अगली अनुरोध को संभालने का अगला अनुरोध 'ऑनएक्शन एक्सेलिंग' के माध्यम से भी नहीं होगा? –

+0

@ LasseV.Karlsen प्रत्येक अनुरोध को 'ऑनएक्शन एक्सेलिंग' निष्पादित करना चाहिए, लेकिन प्रत्येक अनुरोध एकाधिक थ्रेड द्वारा सर्विस नहीं किया जा सकता है? यदि मेरे डेटा एक्सेस लेयर में मैं डेटाबेस के साथ संवाद करने के लिए एक एसिंक्रोनस मॉडल का उपयोग करता हूं, तो मुझे अनुरोध के दौरान दो अलग-अलग धागे नहीं मिल सकते हैं, जहां संस्कृति को संशोधित किया गया है, दूसरा जहां यह नहीं है? –

+1

ऐसा लगता है, इस बारे में पर्याप्त जानकारी नहीं है, क्षमा करें। कोई भी मौका आप .NET 4.5 का उपयोग कर रहे हैं? यदि ऐसा है, तो [CultureInfo.DefaultThreadCurrentCulture] पर एक नज़र डालें (https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.defaultthreadcurrentculture%28v=vs.110%29.aspx) –

उत्तर

3

एक प्रमुख पकड़ लिया await task.ConfigureAwait(false) पद्धति का उपयोग कर किया जा सकता है, जो अक्सर मृतकों के खिलाफ एक आसान (लेकिन गलत) उपाय के रूप में दुरुपयोग किया जाता है। इस तरह, निरंतरता सिंक्रनाइज़ेशन संदर्भ के बिना पूल थ्रेड पर होती है। इस मामले में, CurrentCulture प्रवाह नहीं किया जाएगा, क्योंकि it doesn't get flowed as a part of ExecutionContext। इससे भी बदतर, आप Task.Run(lambda) का उपयोग कर रहे हैं (जो आमतौर पर आपको एएसपी.NET एप्लिकेशन में नहीं होना चाहिए)। lambda के अंदर कोड में सही CurrentCulture नहीं होगा।

अन्यथा, AspNetSynchronizationContextawait निरंतरता में सही ढंग से CurrentCulture प्रवाह करेगा, भले ही वे विभिन्न धागे पर हों।

+1

लंबे समय तक नहीं देखिए :) –

+0

@YuvalItzchakov, वास्तव में :) मेरा नवजात शिशु जोर देता है कि मुझे एसओ की तुलना में उसके साथ और अधिक लटका देना चाहिए :) – Noseratio

+0

बधाई !! निश्चित रूप से एक प्राथमिकता परिवर्तक;) –

2

संक्षेप में, हाँ ASP.NET को SynchronizationContext के माध्यम से आपके एसिंक्रोनस ऑपरेशंस में संस्कृति जैसी चीज़ों को प्रवाह करने के लिए कॉन्फ़िगर किया गया है। आप यह कैसे काम करता है MSDN पर के बारे में थोड़ा पढ़ सकते हैं: https://msdn.microsoft.com/en-us/magazine/gg598924.aspx

कुछ पहचान से संबंधित gotchas है कि आप इस तो सवाल पर के बारे में पढ़ सकते हैं कर रहे हैं: Using ASP.NET Web API, my ExecutionContext isn't flowing in async actions

संबंधित मुद्दे