التابع report_on_exception‎ الخاص بالصنف Thread في روبي

من موسوعة حسوب
< Ruby‏ | Thread
مراجعة 23:07، 5 نوفمبر 2018 بواسطة محمد-بغات (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>report_on_exception‎</code> الخاص بالصنف <code>Thread</code> في روبي}}</noinclude> تصنيف: Ruby...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

يعيد التابع 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 إذا أدى استثناء ما إلى إنهاء مهمة فرعية:

مصادر