तक पहुंचने से रोकने में मुश्किल हो रही है। मैं Web Hook पर .NET 4.0 में काम कर रहा हूं जो लैम्बडा को असीमित रूप से चलाएगा और फिर परिणाम पोस्ट करेगा एक पूरा यूआरआई जब यह खत्म हो जाता है।मैं टास्क को फेंकने वाले किसी भी अपवाद को संभालने के लिए चाहता हूं, लेकिन मुझे माता-पिता
मुझे यह काम करने के लिए मिला है, लेकिन अब मैं कार्य को फेंकने वाले किसी भी अपवाद को संभालने के लिए चाहता हूं, और मुझे माता-पिता तक पहुंचने से रोकने में मुश्किल हो रही है।
यहाँ मेरी कोड का हिस्सा है:
private readonly Func<T> _startTask;
private readonly string _responseUri;
public Task<T> Begin()
{
var task = new Task<T>(_startTask);
task.ContinueWith<T>(End);
task.Start();
return task;
}
private T End(Task<T> task)
{
if (task.IsFaulted)
{
return HandleException(task);
}
var result = task.Result;
WebHookResponse.Respond(result, _responseUri);
return result;
}
private T HandleException(Task<T> task)
{
WebHookResponse.HandleException(task.Exception.InnerException, _responseUri);
return null;
}
एक वैकल्पिक संस्करण है कि मैं कॉल ContinueWith()
की कोशिश की है दो बार एक निरंतरता रजिस्टर करने के लिए OnlyOnRanToCompletion
चलाने के लिए और एक OnlyOnFaulted
चलाने के लिए। (मुझे यकीन है कि अगर दो बार बुला ContinueWith()
सही है नहीं कर रहा हूँ।):
public Task<T> Begin()
{
var task = new Task<T>(_startTask);
task.ContinueWith<T>(End, TaskContinuationOptions.OnlyOnRanToCompletion);
task.ContinueWith<T>(HandleException, TaskContinuationOptions.OnlyOnFaulted);
task.Start();
return task;
}
private T End(Task<T> task)
{
var result = task.Result;
WebHookResponse.Respond(result, _responseUri);
return result;
}
private T HandleException(Task<T> task)
{
WebHookResponse.HandleException(task.Exception.InnerException, _responseUri);
return null;
}
तो बुनियादी तौर पर मैं प्रत्येक कार्य एक निरंतरता समारोह के माध्यम से अपने अपवाद को संभालने के लिए एक तरह से करना चाहते हैं। जैसा कि यह है कि हैंडलएक्सप्शन निरंतरता समारोह को उपर्युक्त उदाहरणों में से किसी एक में कभी नहीं कहा जा रहा है।
मैं एक परीक्षण मामले में अपवाद पैदा कर रहा हूं, और मुझे यह उल्लेख करना चाहिए कि मैं Tasks.WaitAll(tasks);
कार्य का एक सरणी पर कॉल कर रहा हूं ताकि यह सुनिश्चित किया जा सके कि मेरे कार्य करने से पहले सभी कार्य पूर्ण हो गए हैं, और मुझे यकीन नहीं है कि उस कॉल में अंतर होता है कि कार्य द्वारा अपवादों को कैसे नियंत्रित किया जाता है। वर्तमान में WaitAll एक एग्रीगेशन अपवाद फेंकता है जो प्रत्येक कार्य के लिए अपवादों को जोड़ता है क्योंकि उन्हें हैंडलएक्सप्शन निरंतरता फ़ंक्शन द्वारा नियंत्रित नहीं किया जा रहा है।
मुझे समस्या नहीं दिखाई दे रही है। आप क्या व्यवहार देख रहे हैं? –
क्षमा करें, हैंडलएक्सप्शन निरंतरता समारोह नहीं कहा जा रहा है। एक समेकन अपवाद कार्य द्वारा फेंक दिया गया है। प्रतीक्षा करें (कार्य); कहते हैं। मैं एकत्रीकरण अपवाद नहीं देखना चाहता हूं। मैंने अभी सवाल को अद्यतन किया है। –
@ मार्टिन ओवेन हाय, मेरे हैंडलएक्सप्शन कॉन्टीन्यूशन को भी नहीं कहा जा रहा है और मेरा UnobservedTaskException ईवेंट यहां भी नहीं निकाला जा रहा है: http://stackoverflow.com/questions/11831844/unobservedtaskexception-being-throw-but-it-is-handled-by- एक-कार्यवाहक-unobser क्या आपको कुछ समाधान मिला? – newway