في منتديات asp.net أو نظام cs، سيتم إرسال بريد إلكتروني كل بضع دقائق، ولكن إذا تم تنفيذه، فسيتم إعادة تشغيل خادم قاعدة البيانات.
سيؤدي إلى موت موضوع إرسال البريد الإلكتروني.
الرمز المرجعي:
باطلة خاصة مجدولة WorkCallbackEmailInterval (مرسل الكائن)
{
يحاول {
// قم بتعليق المؤقت أثناء معالجة رسائل البريد الإلكتروني
EmailInterval
);
//
Emails.SendQueuedEmails( (HttpContext) sender);
// تحديث المستخدمين المجهولين
//
Users.UpdateAnonymousUsers
( (HttpContext) sender);
قبض (استثناء ه) {
ForumException fe = new ForumException( ForumExceptionType.EmailUnableToSend, "فشل مؤشر ترابط العامل المجدول.", e);
fe.Log();
}
أخيراً {
emailTimer.Change( EmailInterval, EmailInterval );
}
}
في الواقع، الكود: emailTimer.Change(System.Threading.Timeout.Infinite, EmailInterval)
ليس قويًا بما يكفي من الناحية النظرية، إذا حدث خطأ أثناء التنفيذ، فسيتم تنفيذه:
أخيرًا {.
emailTimer.Change( EmailInterval, EmailInterval );
}
ولكن، في الواقع، إذا تمت إعادة تشغيل خادم قاعدة البيانات، فقد يتوقف مؤشر ترابط المؤقت إلى الأبد.
الحل اليدوي: أعد تشغيل تطبيق الويب
أو أعد كتابة الكود: emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval );
to
: emailTimer.Change( EmailInterval * 2, EmailInterval );
مراجع أخرى:
msdn:
System.Theading.Timer.Change API: