एक एएसपी.नेट 3.5 वेबएप को कई कार्यों को शुरू करना है जो पूरा होने में घंटों लगते हैं। स्पष्ट कारणों से, जो पृष्ठ इन कार्यों को शुरू करते हैं, वे समाप्त होने की प्रतीक्षा नहीं कर सकते हैं और न ही कोई भी प्रतिक्रिया प्राप्त करने के लिए लंबे समय तक इंतजार करना चाहेगा, इसलिए कार्य अतुल्यकालिक होना चाहिए।एएसपी.नेट लंबे समय तक चलने वाला कार्य। थ्रेड को अपवादित किया जा रहा है
इन सभी लंबे समय तक चलने वाले कार्यों को संभालने के लिए एक सहायक वर्ग है।
public static bool ScheduleTask(TaskDescriptor task, Action action)
{
bool notAlreadyRunning = TasksAsync.TryAdd(task);
if (notAlreadyRunning)
{
Thread worker = null;
worker = new Thread(() =>
{
try { action(); }
catch(Exception e)
{
Log.LogException(e, "Worker");
}
TasksAsync.RemoveTask(task);
workers.Remove(worker);
});
workers.Add(worker);
worker.Start();
}
return notAlreadyRunning;
}
पहले कार्यान्वयन पर हम ThreadPool.QueueUserWorkItem
दृष्टिकोण का उपयोग किया है, लेकिन परिणाम हमेशा एक ही कर दिया गया है: aprox के बाद मुख्य विधि है कि कार्यक्रम और इन कार्यों को निष्पादित करता है वर्तमान में निम्नलिखित है। 20-30 मिनट एक थ्रेड निरस्त किया जा रहा अपवाद फेंक दिया गया है।
क्या कोई जानता है कि यह क्यों हो रहा है? या इसे कैसे रोका जा सकता है?
अधिक जानकारी:
- मानक विन्यास IIS। निर्णय
अपनी प्रतिक्रियाओं के लिए आप सभी को धन्यवाद:
- कार्य कुछ भी, एक डेटाबेस और/या आईओ संचालन आदि
अद्यतन करने के लिए querys हो सकता है। अब मुझे नहीं पता कि कौन सा प्रश्न उत्तर के रूप में चिह्नित है। वे सभी वैध हैं और इस समस्या के संभावित समाधान हैं। आज के लिए इंतजार करेंगे और सबसे ऊपर वोटों के उत्तर के जवाब के रूप में चिह्नित करेंगे, ड्रॉ के मामले में मैं पहले दिखाए गए उत्तर का चयन करूंगा, आमतौर पर उन्हें सबसे प्रासंगिकता का आदेश दिया जाता है।
किसी भी ऐसे व्यक्ति के लिए जो मुझे लगता है कि समाधान के बारे में जानना है, फिर से समय प्रतिबंधों के कारण, आईआईएस रीसाइक्लिंग कॉन्फ़िगरेशन को बदलना था, लेकिन मैं अपने शोध के आधार पर आदर्श समाधान मानता हूं और निश्चित रूप से उत्तर नीचे, "वर्कर सेवा" बनाना है और लंबे समय तक चलने वाले काम को समन्वयित करने के लिए एएसपी.NET ऐप और नई "वर्कर सेवा" के बीच एक संचार समाधान का उपयोग करना है।
क्या आपके आईआईएस ऐपपूल/कर्मचारी रीसायकल करते हैं? –
आईआईएस कॉन्फ़िगरेशन IIS 7 के लिए मानक कॉन्फ़िगरेशन है। तो हाँ, मुझे लगता है। – Unlimited071
यह थोड़ी देर के बाद से है क्योंकि मैं एएसपी.नेट में घुटने टेक रहा हूं, लेकिन अगर स्मृति कार्य करता है, जब कार्यकर्ता रीसायकल की प्रक्रिया करता है तो वे धागे को रोक सकते हैं। रीसाइक्लिंग को अक्षम करने का प्रयास करें और देखें कि क्या यह थ्रेड गर्भपात का स्रोत है। (अगर यह मामला है तो वर्कअराउंड के बारे में सुनिश्चित नहीं है; जैसा कि मैंने कहा, _that_ विशेष समस्या को छुआ नहीं है) –