dangerousThreadingAPI MDA

dangerousThreadingAPIإدارة التصحيح assهوtant (MDA) هو تنشيط عند Thread.Suspendأسلوب هو استدعاء تشغيل مؤشر ترابط آخر بخلاف مسار التنفيذ الحالي.

الأعراض

تطبيق هو لا تستجيب أو تعليق لأجل غير مسمى. بيانات النظام أو التطبيق قد تظل في الولاية غير متوقعة أو حتى بعد تطبيق ما تم إيقاف مؤقتاً. لم يتم إكمال بعض العمليات كـ المتوقع.

يمكن أن تختلف Sympإلىms نطاق واسع الاستحقاق إلى randomness الناتجة عن إلى المشكلة.

السبب

مؤشر ترابط هو غير متزامن معلق بمؤشر ترابط آخر باستخدام Suspendالأسلوب. هناك هو لا توجد طريقة لتحديد متى يتم ذلك هو آمن تعليق مؤشر ترابط آخر قد يكون في منتصف عملية. توقف مرحلي مؤشر ترابط قد يؤدي تلف بيانات أو أحدث من invariants. يجب وضع مؤشر ترابط في معلق الالولاية وعدم resumed باستخدام Resumeالأسلوب، يمكنك التعليق بشكل غير محدود تطبيق ومن الممكن حدوث عطب في بيانات تطبيق. تم وضع علامة عليها هذه الطرق كـ قديمة.

إذا كان يتم الاحتفاظ بالاوليات المزامنة بمؤشر الترابط الهدف، تظل held أثناء الإيقاف. يمكن أن يؤدي هذا إلى deadlocks يجب آخر الترابط، تشغيل سبيل المثال مؤشر ترابط تنفيذ Suspend، محاولة الحصول تشغيل قفل تشغيل اﻷولى. في هذه الحالة، تظهر المشكلة نفسها كـ حالة توقف تام.

الدقة

تجنب التصميمات التي تتطلب استخدم Suspendو Resume. بالنسبة للتعاون بين عمليات جزئية، باستخدام المزامنة الأوليات مثل كـ Monitor، ReaderWriterLock، Mutex، أو C# lockالعبارة. في الولاية ضرورة استخدام هذه الطرق، تصغير نافذة الوقت وتقليل مقدار تعليمات برمجية التي تنفذ مع مؤشر ترابط هو في الولاية التوقف مرحلي.

التأثير تشغيل وقت التشغيل

MDA هذا أي تأثير تشغيل CLR. ويعلم فقط بيانات حول العمليات ترابط الخطيرة.

الإخراج

يعرف MDA أسلوب خطير مؤشر الترابط الذي تسبب به إلى يتم تنشيطها.

التكوين

<mdaConfig>
  <assistants>
    <dangerousThreadingAPI />
  </assistants>
</mdaConfig>

مثال

يوضح مثال التعليمة البرمجية التالية استدعاء Suspendأسلوب الذي يؤدي إلى تنشيط dangerousThreadingAPI.

using System.Threading;
void FireMda()
{
    Thread t = new Thread(delegate() { Thread.Sleep(1000); });
    t.Start();
    // The following line activates the MDA.
    t.Suspend(); 
    t.Resume();
    t.Join();
}

راجع أيضًا:

المرجع

Thread

تأمين بيان (C# مرجع)

المبادئ

تشخيص الأخطاء مع المساعدين التصحيح مدارة