यदि आप एक टास्क बनाते हैं, और आप कभी भी कॉल नहीं करते हैं task.Wait()
या रिजल्ट प्राप्त करने का प्रयास नहीं करते हैं Task<T>
, जब कचरा संग्रहकर्ता द्वारा कार्य एकत्र किया जाता है, तो यह अंतिम रूप से आपके आवेदन को फाड़ देगा। विवरण के लिए, TPL में अपवाद हैंडलिंग पर MSDN का पृष्ठ देखें ।
यहां सबसे अच्छा विकल्प अपवाद को "संभाल" करना है। यह एक निरंतरता के माध्यम से किया जा सकता है - आप कार्य के लिए एक निरंतरता संलग्न कर सकते हैं, और उस अपवाद को लॉग / निगल / आदि कर सकते हैं। यह कार्य अपवादों को लॉग करने का एक साफ तरीका प्रदान करता है, और इसे एक सरल एक्सटेंशन विधि के रूप में लिखा जा सकता है, अर्थात:
public static void LogExceptions(this Task task)
{
task.ContinueWith( t =>
{
var aggException = t.Exception.Flatten();
foreach(var exception in aggException.InnerExceptions)
LogException(exception);
},
TaskContinuationOptions.OnlyOnFaulted);
}
उपरोक्त के साथ, आप किसी भी कार्य को एप्लिकेशन को फाड़ने से रोक सकते हैं, और इसे लॉग इन कर सकते हैं:
Task.Factory.StartNew( () =>
{
// Do your work...
}).LogExceptions();
वैकल्पिक रूप से, आप TaskScheduler.UnobservedTaskException की सदस्यता ले सकते हैं और इसे वहां संभाल सकते हैं।
Off
अपनी पसंद के चार-अक्षर वाले शब्द के रूप में नामित एक वर्ग में एक स्थिर स्टब विधि है, और अपनी पकड़-सभी निरंतरताओं के लिए इसका उपयोग करें। इस विशेष अपवाद से कुछ पैंट-अप हताशा से निपटने में मदद करता है।