मैंने इस विषय के बारे में this article on MSDN, साथ ही SO पर कुछ प्रश्न/उत्तर का अध्ययन किया, लेकिन यह नहीं समझ सकता कि नीचे कोड क्यों काम नहीं करता है (नमूना कंसोल ऐप में)।डीबगर के साथ कार्य में अपवादों को कैसे संभालें?
एमएसडीएन के अनुसार, समेकित अपवाद को फेंकने की उम्मीद है, जिसमें hello
संदेश के साथ एक आंतरिक अपवाद होगा। इसके बजाए, यह hello
अपवाद अनचाहे है। यह एक डीबगर के अंदर होता है।
यदि आप जारी रखें या स्टैंडअलोन चलाएं, तो यह अपेक्षा के अनुसार काम करता है। वीएस में हर समय जारी रखने से बचने का कोई तरीका है? आखिरकार, Try...Catch
ब्लॉक में जो कुछ भी है, उसे माना जाता है जिसे एक थ्रेडेड प्रोग्रामिंग मॉडल में संभाला जाता है। अन्यथा, डीबगिंग एक दुःस्वप्न हो सकता है।
VB.NET
Sub Main()
Try
Task.Factory.StartNew(AddressOf TaskThatThrowsException).Wait()
Catch ex As AggregateException
Console.WriteLine(ex.ToString) 'does not get here until you hit Continue
End Try
End Sub
Private Sub TaskThatThrowsException()
Throw New Exception("hello") 'exception was unhandled
End Sub
सी #
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
try {
Task.Factory.StartNew(TaskThatThrowsException).Wait();
}
catch (AggregateException ex) {
Console.WriteLine(ex.ToString()); //never gets here
}
}
static void TaskThatThrowsException() {
throw new Exception("hello"); //exception was unhandled
}
}
}
वहाँ स्पष्ट कुछ मैं यहाँ याद आ रही है है?
डिबगर सभी अपवादों पर रोकने के लिए सेट करें। यह कहां रुकता है? इसे 'टास्कटैट थ्रॉज़ अपवाद' और 'प्रतीक्षा' पर रोकना चाहिए। – usr
@usr: अब भी यह 'थ्रो न्यू अपवाद ("हैलो")' लाइन पर रुक जाता है, सभी थ्रोउन की जांच करने से यह बेहतर नहीं होता है। मैं चाहता हूं कि यह उस पर रुक न जाए, बल्कि कंसोल की प्रक्रिया करें। राइटलाइन। अन्यथा, डीबगिंग एक दुःस्वप्न हो सकता है। – Neolisk
कार्यों से अपवाद StartNew में दिखाई नहीं देते हैं, केवल Wait() में। Dim MyTask = Task.Factory.StartNew (...) MyTask.Wait() पकड़ें ... – adrianm