التابع Thread.report_on_exception‎ في روبي

من موسوعة حسوب
< Ruby‏ | Thread
مراجعة 12:47، 5 ديسمبر 2018 بواسطة جميل-بيلوني (نقاش | مساهمات) (مراجعة وتدقيق.)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

يعيد التابع report_on_exception حالة "التبليغ عند الاستثناء" (report on exception). القيمة الافتراضية هي true منذ روبي 2.5.

كل المهام الفرعية التي يتم إنشاؤها عندما تكون قيمة هذه الراية مساوية للقيمة true ستبعث رسالة إلى المجرى stderr$ إذا أنهى استثناء ما هذه المهمة الفرعية.

يُستخدَم هذا التابع لإمساك الأخطاء في المهمة الفرعية في وقت مبكر. لكن في بعض الحالات، قد لا ترغب في هذه المخرجات. هناك عدة طرق لتجنب المخرجات الزائدة:

  • إذا لم يكن الاستثناء مقصودًا، فأفضل خيار أمامك هو إصلاح سبب الاستثناء بحيث لا يُطلق بعدها.
  • إذا لم يكن الاستثناء مقصودًا، فقد يكون من الأفضل معالجته بالقرب من الموضع الذي أطلق منه بدلًا من تركه ينهي المهمة الفرعية.
  • في حال كان مُؤمّنا (guaranteed)، سيتم ضم (join) المهمة الفرعية عبر join أو value، بعد ذلك سيكون من الآمن تعطيل هذا التقرير عبر التعبير Thread.current.report_on_exception = false عند بدء تشغيل المهمة الفرعية. لكن هذا قد يعالج الاستثناء في وقت متأخر، أو قد لا يٌعالج أبدا في حالة عدم ضم المهمة الفرعية إن كانت المهمة الفرعية الرئيسية (parent thread) معطلة.

يوجد أيضًا تابع نسخة (instance level method) لتعيين هذا الخيار لمهمة فرعية معينة، لذا راجع صفحة report_on_exception.

البنية العامة

report_on_exception true or false

القيمة المعادة

تعاد قيمة منطقية تمثل حالة "التبليغ عند الاستثناء" (report on exception).

أمثلة

مثال على استخدام التابع report_on_exception‎:

Thread.new { 1.times { raise } }

سينتج هذا المثال المخرجات التالية في المجرى ‎$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'‎

انظر أيضًا

  • التابع report_on_exception=‎: يضبط التابع عند استدعائه بالشكل report_on_exception= boolean‎ حالة "التبليغ عند الاستثناء" (report on exception).

مصادر