التابع report_on_exception
الخاص بالصنف Thread
في روبي
يعيد التابع report_on_exception
حالة "report on exception".
القيمة الافتراضية هي true
منذ روبي 2.5.
كل المهمة الفرعية التي تم إنشاؤها عندما تكون قيمة هذه الراية مساوية للقيمة true ستبعث رسالة على المجرى stderr $ إذا أنهى استثناء ما يقتل المهمة الفرعية.
سينتج هذه المخرجات على المجرى $ stderr:
#<Thread:...> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
2: from -e:1:in `block in <main>'
1: from -e:1:in `times'
يُستخدم هذا لإمساك الأخطاء في المهمة الفرعية في وقت مبكر. في بعض الحالات، قد لا ترغب في هذه المخرجات. هناك عدة طرق لتجنب المخرجات الزائدة:
إذا لم يكن الاستثناء مقصودا، فأفضل خيار أمامك هو إصلاح سبب الاستثناء بحيث لا يُطلق بعدها.
وإذا لم يكن الاستثناء مقصودًا، فقد يكون من الأفضل معالجته بالقرب من الموضع الذي أطلق منه بدلاً من تركه ينهي المهمة الفرعية Thread
.
في حال كان مُؤمّنا (guaranteed)، سيتم ضم المهمة الفرعية Thread
عبر #join
أو #value
، ثم سيكون من الآمن تعطيل هذا التقرير بواسطة التعبير Thread.current.report_on_exception = false
عند بدء تشغيل المهمة الفرعية Thread
. لكن هذا قد يعالج الاستثناء في وقت متأخر، أو قد لا يٌعالج أبدا في حالة عدم ضم Thread
إن كانت المهمة الفرعية الرئيسية (parent thread) معطلة، إلخ.
انظر أيضا صفحة ::report_on_exception=
.
يوجد أيضًا تابع نسخة (instance level method) لتعيين هذا الخيار لمهمة فرعية معينة، راجع صفحة report_on_exception=
.
البنية العامة
report_on_exception→ true or false
القيمة المُعادة
أمثلة
مثال على استخدام التابع report_on_exception
:
Thread.new { 1.times { raise } }
انظر أيضا
- التابع
raise
: يطلق التابعraise
استثناء من مهمة فرعية معينة. لا يلزم أن يكون الُمستدعي (caller) منthr
. انظر صفحةKernel#raise
لمزيد من المعلومات. - التابع
report_on_exception=
: يُعيد التابعreport_on_exception=
الحالة الجديدة. عند إعطائه القيمةtrue
، سترث كل المهمة الفرعية التي تم إنشاؤها بعد ذلك الشرط (condition) وتبعث رسالة على المجرى $ stderr إذا أدى استثناء ما إلى إنهاء مهمة فرعية: