के भीतर एसिंक्रोनस विधियों से अपवादों को कैसे संभालें I Rx का उपयोग करके कुछ कार्यों को असंकालिक रूप से संसाधित करने की कोशिश कर रहा हूं, उदा।एक SelectMany कथन
var list = Enumerable.Range(0, 100)
.ToObservable()
.SelectMany(x => Observable.Start(() => {
Console.WriteLine("Processing {0} ...", x);
Thread.Sleep(100 * x % 3);
if (x > 90) {
Console.WriteLine("Procesing exception {0} > 90", x);
throw new Exception("Value too large");
}
Console.WriteLine("Processing {0} completed.", x);
return x;
}))
.Subscribe(
x => { Console.WriteLine("Next [{0}]", x); },
e => {
Console.WriteLine("Exception:");
Console.WriteLine(e.Message);
},
() => { Console.WriteLine("Complete"); }
);
इस कोड के साथ मेरी समस्या यह है कि अपवाद ग्राहक को पास नहीं किया जाता है। तो, बहुत कोशिश करने के बाद मैंने छोड़ दिया और इस सरल सवाल से पूछने का फैसला किया:
SelectMany
कथन के भीतर एसिंक्रोनस विधियों के भीतर उठाए गए अपवादों को आप कैसे संभालें?
बस इसे स्पष्ट करने के लिए, अंतिम कार्यान्वयन एक समेकित फ़ंक्शन कॉल है जो अपवाद फेंक सकता है या नहीं। लक्ष्य इसे ग्राहक को पास करना है ताकि इसे आगे संसाधित किया जा सके (विशिष्ट मामले में उपयोगकर्ता को एक संदेश दिखाया जाएगा)।
संपादित
मैं एक जवाब के लिए नीचे मेरी निष्कर्ष ले जाया गया, ताकि मैं इस सवाल का जवाब के रूप में चिह्नित कर सकते हैं। निजी तौर पर, मैं स्वयं जवाब देने से सहमत नहीं हूं ... लेकिन कभी-कभी कोई दूसरा रास्ता नहीं है, इसलिए इसके लिए खेद है।
क्या इससे आपकी मदद का जवाब मिलता है? http: // stackoverflow।कॉम/प्रश्न/7210051/पकड़-अपवाद-जो-एक-सदस्यता-ऑन-ए-सब्सक्रिप्शन-ऑननेक्स्ट-एक्शन – user981225
बिल्कुल ठीक नहीं है क्योंकि यह अपवाद को दबाता है, हालांकि, अगर कुछ भी बेहतर नहीं होता है तो वैपिंग विचार उपयोगी हो सकता है हालांकि, मुझे यकीन नहीं है कि रैपिंग मेरे परिदृश्य में काम करेगी क्योंकि मैं एकाधिक एसिंच्रोनस और समांतर कॉल से निपट रहा हूं ... लेकिन मैं जांच करूंगा, धन्यवाद। – AxelEckenberger
@ user981225, धन्यवाद मूल्यवान साबित हुआ लेकिन उत्तर काफी सरल है, संपादन देखें। – AxelEckenberger