asynchronousThreadAbort MDA

asynchronousThreadAbortإدارة التصحيح assهوtant (MDA) هو تنشيط عندما يحاول مؤشر ترابط تقديم إحباط غير متزامن في مؤشر ترابط آخر. متزامن مؤشر ترابط إحباط عدم تنشيط asynchronousThreadAbortMDA.

الأعراض

تعطل أحد تطبيقات بلم تتم معالجته ThreadAbortExceptionعند تطبيق الرئيسي مؤشر ترابط هو إحباط. إذا تم تطبيق إلى متابعة إلى التنفيذ، قد تكون عواقب worse من تطبيق تعطل، ربما ينتج عن تلف بيانات إضافية.

العمليات القصد إلى أن يكون من المحتمل أن تتم مقاطعتك aإلىmic بعد إتمام جزئي، مع ترك بيانات تطبيق في الولاية غير متوقعة. ThreadAbortExceptionيمكن إنشاؤها من نقاط عشوائية العاملين في تنفيذ تعليمات برمجية، غالباً في الأماكن التي استثناء هو من غير المتوقع arهوe. قد يكون تعليمات برمجية غير قادرة على معالجة مثل استثناء، مما يؤدي إلى الولاية تالفة.

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

السبب

تعليمات برمجية في مؤشر ترابط واحد يسمى Thread.Abortأسلوب تشغيل مؤشر ترابط هدف إلى تقديم غير متزامن مؤشر الترابط الإيقاف قبل الاكتمال. الإيقاف قبل الاكتمال بمؤشر ترابط هو غير متزامن لأن تعليمات برمجية التي تجعل الاستدعاء Abortهو قيد التشغيل على مؤشر ترابط مختلف عن الهدف لإحباط تشغيل. لا يقوم إحباط مسار التنفيذ المتزامن يسبب مشكلة لأن مؤشر ترابط تنفيذ Abortيجب القيام بذلك فقط عند نقطة اﻷمن حيث تطبيق الولاية هو consهوtent.

غير متزامن إحباط مسار التنفيذ بتقديم مشكلة حيث تتم فيه معالجة على نقاط لا يمكن التنبؤ به في تنفيذ مؤشر ترابط الهدف. في تجنب هذا، تتم كتابة تعليمات برمجية في يجب تشغيل تشغيل مؤشر ترابط الذي قد يكون تم إحباطها بهذه الطريقة في معالجة ThreadAbortExceptionتقريبا كل سطر من تعليمات برمجية، تأخذ الرعاية في وضع البيانات مرة أخرى في تطبيق في الولاية متناسقة. هو لا realهوtic بحيث يتوقع برمجية يتم كتابتها بترتيب هو المشاكل في الاعتبار أو كتابة التعليمات البرمجية التي يحمي الجميع الحالات الممكنة.

المكالمات في غير مدار تعليمات برمجية و finallyكتل سيتم لا إحباط غير متزامن ومباشرة بعد الخروج من واحد هذه الفئات.

قد يكون السبب صعوبة إلى تحديد استحقاق إلى randomness الناتجة عن إلى المشكلة.

الدقة

تجنب تصميم التعليمة البرمجية التي تتطلب الاستخدام غير متزامن مؤشر الترابط إحباط. توجد عدة أساليب أكثر ملاءمة لمقاطعة من مؤشر ترابط الهدف التي لا تتطلب استدعاء إلى Abort. الأكثر أمنا هو لتقديم mechanهوm، مثل خاصية عامة، والذي يشير مؤشر ترابط الهدف لطلب مقاطعة. يقوم مؤشر ترابط الهدف الإشارة في بعض نقاط اختبار آمنة. إذا لاحظ أنه تم طلب مقاطعة، يمكن إيقاف أمان.

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

MDA هذا أي تأثير تشغيل CLR. تقارير البيانات فقط حول غير متزامن مؤشر الترابط إحباط.

الإخراج

تقارير MDA المعرف مؤشر ترابط القيام الإحباط "و" المعرف مؤشر ترابط التي هو الهدف الإحباط. هذه لن يكون نفس لأن th هو هو محدودة لإحباط غير متزامنة.

التكوين

<mdaConfig>
  <assistants>
    <asynchronousThreadAbort />
  </assistants>
</mdaConfig>

مثال

تنشيط asynchronousThreadAbortMDA يتطلب فقط يتصل إلى Abortتشغيل منفصلة مؤشر ترابط قيد التشغيل. خذ بعين الاعتبار إلى النتائج في حالة تشغيل محتويات مؤشر ترابط دالة كانت التعيين من العمليات الأكثر تعقيداً والتي قد يتم مقاطعتها في أي لحظة إجبارية بواسطة الإحباط.

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

راجع أيضًا:

المرجع

Thread

المبادئ

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