2011-10-02 20 views
38

मुझे यकीन नहीं है कि ऐसा क्यों होता है और मैंने स्पष्ट रूप से धागे को निरस्त नहीं किया है, इसलिए यह आश्चर्य की बात है। लेकिन मैं अपवाद लॉग करता हूं और मैं देख रहा हूं:मुझे एएसपीनेट में "थ्रेड छोड़ा जा रहा था" क्यों मिल रहा है?

सिस्टम। थ्रेडिंग। थ्रेडएबॉर्ट अपवाद - थ्रेड निरस्त किया जा रहा था।

यह System.Threading.WaitHandle.WaitOne के लिए एक कॉल में होना प्रतीत होता है। मुझे यकीन नहीं है कि यह अपवाद कितनी दूर है। मुझे नहीं लगता कि मेरे थ्रेड कभी समाप्त हो जाते हैं क्योंकि मैं लॉग पकड़ता हूं और त्रुटि निगलता हूं।

क्या किसी को पता है कि मुझे इन त्रुटियों को क्यों मिल रहा है? शायद यह तब होता है जब मैं अपने सर्वर को मजबूती से समाप्त कर रहा हूं या इसे रीबूट करने के लिए कह रहा हूं? यदि ऐसा नहीं है तो उन्हें क्या हो सकता है?

+0

क्या आप एप्लिकेशन_स्टार्ट में अपना कोड दिखा सकते हैं? –

+0

@rick: मुझे नहीं पता कि आप क्या ढूंढने की उम्मीद करते हैं लेकिन यहां एक स्निपेट है। 'var obj1 = नया MyServiceObject(); srv1 = नया थ्रेड (obj1.Queue); ... srv1.Start() '। ध्यान दें कि obj1 एक उपयोग ब्लॉक के अंदर नहीं है, इसलिए इसे समय से पहले निपटान नहीं किया जाता है। यह सिर्फ एक सादा धागा है जिसे मैं स्टार्टअप –

+0

पर उत्तर देता हूं 'इस उत्तर का प्रयास करें .. http://stackoverflow.com/questions/20120800/system-threading-threadabortexception-on-generic-redirection/33999795#33999795 – Moumit

उत्तर

43

नहीं, ThreadAbortException एक सरल Response.Redirect

+1

हम्म। अच्छा जवाब +1 लेकिन यह नहीं है। यह वास्तव में उन थ्रेडों पर हो रहा है जो मैं स्पॉन करता हूं (आमतौर पर एप्लिकेशन_स्टार्ट से) और मुख्य अनुरोध पथ पर नहीं। –

+0

थ्रेडएबॉर्ट अपवाद प्राप्त करने का यही एकमात्र तरीका है - आप इसे एकमात्र तरीका बनाते हैं। जैसे एक अनुरोध भी लिया जा सकता है> 9 0 सेकंड इसलिए आईआईएस ने इसे मार दिया। – saille

24

ASP.NET spawns द्वारा फेंका और कार्यकर्ता हर समय आवश्यकतानुसार प्रक्रियाओं को मारता है। आपका धागा बस एएसपी.नेट द्वारा बंद हो रहा है। अनुप्रयोग पूल के AppDomainPRB: ThreadAbortException Occurs If You Use Response.End, Response.Redirect, or Server.Transfer

Response.Redirect ("bla.aspx", false); 

या

try 
{ 
    Response.Redirect("bla.aspx"); 
} 
catch (ThreadAbortException ex) 
{ 
} 
+0

हम्म। अच्छा जवाब +1 लेकिन यह नहीं है। यह वास्तव में उन थ्रेडों पर हो रहा है जो मैं स्पॉन करता हूं (आमतौर पर एप्लिकेशन_स्टार्ट से) और मुख्य अनुरोध पथ पर नहीं। –

+0

इस उत्तर में मेरी मदद की है! बहुत बहुत धन्यवाद, मैं इस मुद्दे पर बहुत अधिक समय बर्बाद कर रहा था – Lester

32

आप Application_Start में धागे अंडे हैं, वे अभी भी में क्रियान्वित किया जाएगा:

ओल्ड उत्तर:

ज्ञात समस्या।

यदि कोई एप्लिकेशन कुछ समय के लिए निष्क्रिय है (जिसका अर्थ है कि कोई अनुरोध नहीं आ रहा है), या कुछ अन्य शर्तों को पूरा किया जाता है, ASP.NET पूरे AppDomain रीसायकल करेगा।

जब ऐसा होता है, तो AppDomain से शुरू किए गए किसी भी थ्रेड, जिसमें Application_Start से शामिल हैं, को निरस्त कर दिया जाएगा।

इस सवाल में अनुप्रयोग पूल और रीसाइक्लिंग के बारे में अधिक बहुत सारे: What exactly is Appdomain recycling

आप IIS/ASP.NET के भीतर एक लंबी चलने वाली प्रक्रिया चलाने का प्रयास कर रहे हैं, तो संक्षिप्त उत्तर आमतौर पर है "नहीं है"। यही विंडोज़ सेवाओं के लिए है।

+0

ऐसा लगता है कि क्या हो रहा है। मेरे पास एक और सवाल है ... साइट फिर से सक्रिय होने पर एप्लिकेशन_स्टार्ट फिर से चलाया जाता है? ऐसा लगता है कि यह नहीं है (लेकिन मैंने कुछ गलत कोड किया हो सकता है) –

+2

यह नहीं है। यहां से: http://msdn.microsoft.com/en-us/library/ms178473.aspx "एप्लिकेशन_स्टार्ट और एप्लिकेशन_इंड विधियां विशेष विधियां हैं जो एचटीपी अनुप्रयोग घटनाओं का प्रतिनिधित्व नहीं करती हैं। एएसपी.नेट उन्हें आवेदन के जीवनकाल के लिए एक बार कॉल करता है डोमेन, प्रत्येक Http अनुप्रयोग उदाहरण के लिए नहीं। " –

9

यह समस्या Response.Redirect और Server.Transfer विधियों में होती है क्योंकि दोनों विधियां आंतरिक रूप से Response.End पर कॉल करती हैं।

इस समस्या के लिए समाधान निम्नानुसार है।

Server.Transfer के लिए, Server.Execute विधि का उपयोग करें।

डाउनलोड नमूना उदाहरण के लिए this link पर जाएं।

11

एएसपी में होस्ट की गई एक वेब सेवा के लिए।

<configuration> <system.web> 

<httpRuntime executionTimeout="360" /> 

</system.web> 

</configuration> 

इस सेट और धागा गर्भपात अपवाद दूर :)

+0

एसिंक्रोनस वेब कॉल करते समय यह ठीक होने के लिए मिला। – Jonny

+3

"इसे सेट करें और थ्रेड अपोर्ट अपवाद दूर जायेगा" .. कुछ मिनटों के लिए;) – saille

+2

@ सेलल 6 मिनट सटीक होने के लिए ... –

4

यह त्रुटि एक बार से अधिक प्रतिक्रिया को समाप्त करने की कोशिश कर के कारण हो सकता जाना होगा: नेट, विन्यास संपत्ति executionTimeout है। चूंकि अन्य उत्तरों में पहले से ही उल्लेख किया गया है कि विभिन्न विधियां हैं जो प्रतिक्रिया समाप्त कर देगी (जैसे Response.End, या Response.Redirect)। यदि आप एक पंक्ति में एक से अधिक कॉल करते हैं, तो आपको यह त्रुटि मिल जाएगी।

Response.TransmitFile का उपयोग करने के बाद मैंने Response.End का उपयोग करने की कोशिश की, जब मैंने प्रतिक्रिया को समाप्त करने के बाद भी इस त्रुटि को पार किया।

+0

बाधाएं हैं, प्रतिक्रिया समाप्त होने के बाद प्रतिक्रिया के साथ कुछ भी कर रहा है इस त्रुटि का कारण बन सकता है। – jahu

0

मुझे यह त्रुटि मिली जब मैंने उपयोगकर्ता के सफल लॉगिन के बाद Response.Redirect किया।

मैंने इसके बजाय FormsAuthentication.RedirectFromLoginPage करके इसे ठीक किया।

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