Flowchart · BackgroundService
Vòng lặp của một worker định kỳ an toàn
Vòng lặp BackgroundService với PeriodicTimer
BackgroundService singleton chờ tick của PeriodicTimer, mỗi lần chạy tạo scope DI mới cho DbContext, bắt và log exception rồi chờ chu kỳ sau thay vì để worker chết, và dừng gọn khi token bị huỷ.
SCOPE MỚI MỖI LẦN CHẠY
TOKEN HUỶ
CÓ
CÓ
KHÔNG
VÒNG SAU
BackgroundService
singleton · ExecuteAsync
Có tick
tiếp theo?
Dừng gọn
StopAsync · ShutdownTimeout
Tạo scope mới
CreateAsyncScope()
RunAsync(ct)
DbContext · IEmailService
Ném
exception?
LogError, không throw
thử lại ở chu kỳ sau
DbContext mới mỗi lần,
change tracker luôn sạch
Exception thoát
khỏi ExecuteAsync
là worker chết
vĩnh viễn
CHÚ GIẢI
Bắt đầu / kết thúc
Bước xử lý
Rẽ nhánh
Hai điểm sống còn
Phạm vi DI scope
© tiennhm