के भीतर एचटीपी क्लाइंट अपवादों को उचित रूप से संभालने की उम्मीद है कि मैं उम्मीद कर रहा था कि कोई मुझे किसी समस्या पर थोड़ा सा प्रबुद्ध कर सकता है जिसे मैं एटीएनसीसी/एचटीपी क्लाइंट के साथ अपवाद हैंडलिंग के संबंध में सामना कर रहा हूं। मैं वर्णन करने के लिए कुछ कोड लिखा है, और यह दोनों एक Windows Phone 8 डिवाइस और एमुलेटर पर excecuted किया जा रहा है:एसिंक/प्रतीक्षा
private async void SearchButton_Click(object sender, EventArgs e)
{
try
{
HttpClient client = new HttpClient();
System.Diagnostics.Debug.WriteLine("BEGIN FAULTY REQUEST:");
string response = await client.GetStringAsync("http://www.ajshdgasjhdgajdhgasjhdgasjdhgasjdhgas.tk/");
System.Diagnostics.Debug.WriteLine("SUCCESS:");
System.Diagnostics.Debug.WriteLine(response);
}
catch (Exception exception)
{
System.Diagnostics.Debug.WriteLine("CAUGHT EXCEPTION:");
System.Diagnostics.Debug.WriteLine(exception);
}
}
बटन इस समारोह का आह्वान है कि दोहन, डिबगर कंसोल में निम्न उत्पादन, सबसे पैदा करता है दिलचस्प बोल्ड में लोगों को किया जा रहा है:
शुरू ख़राब अनुरोध:
प्रकार 'System.Net.WebException' की एक अपवाद System.Windows.ni.dll में हुई है और एक कामयाब पहले से संभाला नहीं गया था/मूल सीमा
प्रकार 'System.Net.WebException' की एक अपवाद System.Windows.ni.dll में हुई है और एक कामयाब/देशी सीमा
प्रकार का एक पहला मौका अपवाद 'सिस्टम से पहले संभाला नहीं गया था। Net.Http.HttpRequestException System.Net.Http.HttpRequestException 'mscorlib.ni.dll में हुई है और एक कामयाब/देशी सीमा पहले से संभाला नहीं गया था' mscorlib.ni.dll
प्रकार का एक अपवाद में हुई '
CAUGHT अपवाद: (और यहां यह HttpRequestException को प्रिंट करता है)
बेशक मुझे इस मामले में एक त्रुटि की उम्मीद है क्योंकि मैं जिस यूआरएल को कॉल कर रहा हूं वह बकवास है। जो मैं यहां समझ नहीं रहा हूं, यही कारण है कि डीबगर रिपोर्ट करता है कि अपवादों को संभाला नहीं जाता है, जब आउटपुट एक साथ रिपोर्ट करता है कि अपवाद पकड़ा जाता है। इसके अलावा, ऐप का UI पक्ष आउटपुट मुद्रित होने पर बहुत कम उत्तरदायी हो जाता है, यह दर्शाता है कि कुछ शायद अस्वस्थ है।
क्या यह एसिंक के साथ काम करते समय अपवादों को संभालने का तरीका नहीं है और इंतजार कर रहा है? मैं किसी भी इनपुट की सराहना करता हूं! धन्यवाद।
जहां तक जवाबदेही के रूप में आप एक यूआई घटना में लंबे प्रक्रियाओं नहीं भागना चाहिए। ये त्वरित और लंबी चल रही प्रक्रियाओं को एक और धागे में पूरा किया जाना चाहिए। 'BackgroundWorker' को आज़माएं http://msdn.microsoft.com/en-us/library/System.ComponentModel.BackgroundWorker.aspx – Harrison