मैं प्रदर्शन में सुधार के लिए अपने मौजूदा एएसपीनेट एप्लिकेशन में टीपीएल लागू करने की योजना बना रहा हूं। मैं उन्हें चुनिंदा स्थानों पर लागू कर रहा हूं (जैसे एक टेबल पर डेटा लिखने के लिए कॉल और किसी प्रकार के अप्रासंगिक और गैर-सिंक संचालन), और हम Global.asax फ़ाइल में application_error ईवेंट में सभी हैंडल न किए गए अपवाद को संसाधित कर रहे हैं।
लेकिन जब मुझे कोई त्रुटि मिलती है तो टीपीएल उस त्रुटि को application_error ईवेंट में नहीं फेंक रहा है। जब मैंने Task.WaitAll(t1)
के साथ प्रयास किया तो इसे app_error ईवेंट पर फेंक दिया गया, लेकिन लिखित कोड को संसाधित करने में कुछ समय लग रहा था। लेकिन जब मैं निम्नलिखित विधि के साथ प्रयास करता हूं (केवल कुछ समय लेने के लिए जब गलती होती है) तो यह भी मुख्य धागे को अपवाद नहीं फेंक रहा है।
Task.Factory.StartNew(Sub(mainContext)
HttpContext.Current = mainContext
LookUpRepository.AddItems(CurrentContext.LoggedInUser.UserID, ClientID)
End Sub, HttpContext.Current).ContinueWith(Sub(tplException)
For Each ex In tplException.Exception.InnerExceptions
Throw ex
Next
End Sub, TaskContinuationOptions.OnlyOnFaulted Or TaskContinuationOptions.ExecuteSynchronously)
मैंने उत्तेजना को पकड़ने के लिए ConcurrentQueue
के साथ प्रयास किया और कभी-कभी यह प्रशंसा को रोक देता है और नियंत्रण कोड की आगे की रेखा को आगे नहीं बढ़ा रहा है।
तो मैं टीपीएल उत्तेजना को मुख्य धागे से कैसे जोड़ सकता हूं जो एएसपीनेट एप्लिकेशन को होस्ट कर रहा है।
1 उत्तर
एक अवलोकन योग्य संग्रह ObservableCollection
है जो .Net में उपलब्ध है। यदि हमारे द्वारा खोले गए थ्रेड में कोई त्रुटि है और यदि हम उन्हें इस ऑब्जर्वेबल कोलेक्शन में जोड़ते हैं, तो यह एक ईवेंट उठाएगा, उस ईवेंट से हम इस त्रुटि को संभाल सकते हैं
Task.Factory.StartNew(Sub(mainContext)
'Using sw As StreamWriter = File.AppendText("c:/logs/t7.txt")
' sw.WriteLine("thread=" + Thread.CurrentThread.ManagedThreadId.ToString())
'End Using
HttpContext.Current = mainContext
'Do some operation
End Sub, HttpContext.Current).ContinueWith(Sub(tplException, subContext)
HttpContext.Current = subContext
If IsNothing(tplException.Exception) Then Exit Sub
For Each ex In tplException.Exception.InnerExceptions
MyAppState.Instance.ObservableException.Add(ex)
Next
End Sub, HttpContext.Current)
संग्रह घोषित करने की आवश्यकता है
Public WithEvents ObservableException As ObservableCollection(Of Exception)
इवेंट जो अपवाद को संभालने के लिए .Net फ्रेमवर्क द्वारा उठाया जाएगा
Private Sub CollectionChangedHandler(sender As Object, e As NotifyCollectionChangedEventArgs) Handles ObservableException.CollectionChanged
Dim ex = DirectCast(e.NewItems(0), Exception)
ExceptionLog.SaveFile(ExceptionLog.ReadExceptionInformationFromException(ex))
End Sub
संबंधित सवाल
नए सवाल
.net-4.0
.NET फ्रेमवर्क का संस्करण 4.0। विशेष रूप से .NET फ्रेमवर्क 4.0 से संबंधित प्रश्नों के लिए उपयोग करें। .NET फ्रेमवर्क पर आम तौर पर प्रश्नों के लिए, .net टैग का उपयोग करें।