ใน asp.net forums2 หรือระบบ cs อีเมลจะถูกส่งทุกๆ สองสามนาที แต่หากมีการดำเนินการ เซิร์ฟเวอร์ฐานข้อมูลจะรีสตาร์ท
จะทำให้เธรด Send Email ไม่ทำงาน
รหัสอ้างอิง:
โมฆะส่วนตัว ScheduledWorkCallbackEmailInterval (ผู้ส่งวัตถุ)
-
พยายาม {
// ระงับการจับเวลาในขณะที่เราประมวลผลอีเมล
emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval );
// ส่งอีเมล
-
Emails.SendQueuedEmails( ผู้ส่ง (HttpContext));
//อัปเดตผู้ใช้ที่ไม่ระบุชื่อ
-
Users.UpdateAnonymousUsers( (ผู้ส่ง HttpContext);
}
จับ (ข้อยกเว้นจ) {
ForumException fe = ForumException ใหม่ (ForumExceptionType.EmailUnableToSend, "เธรดผู้ปฏิบัติงานตามกำหนดการล้มเหลว", e );
fe.Log();
-
ในที่สุด {
emailTimer.Change( ช่วงเวลาอีเมล, ช่วงเวลาอีเมล );
-
-
ในความเป็นจริง รหัส: emailTimer.Change(System.Threading.Timeout.Infinite, EmailInterval);
ตามทฤษฎีแล้ว หากเกิดข้อผิดพลาดระหว่างการดำเนินการ ก็จะถูกดำเนินการ:
ในที่สุด {
emailTimer.Change( ช่วงเวลาอีเมล, ช่วงเวลาอีเมล );
-
แต่ในความเป็นจริง ถ้าเซิร์ฟเวอร์ฐานข้อมูลถูกรีสตาร์ท เธรดตัวจับเวลาอาจหยุดทำงานตลอดไป
แก้ปัญหา
ด้วยตนเอง: รีสตาร์ทเว็บแอป
หรือเขียนโค้ดใหม่: emailTimer.Change( System.Threading.Timeout.Infinite, EmailInterval );
เป็น: emailTimer.Change( EmailInterval * 2, EmailInterval );
ข้อมูลอ้างอิงอื่นๆ:
msdn:
System.Theading.Timer.Change API: