你需要有東西,允許共享上下文。控制器默認會有自己的。
你可以使用像一個static
包裝圍繞一個共同的背景下該使用方法:
public static class EmailSenderContext {
private static object _locker = new object();
public static bool _canSend = true;
public static bool CanSend() {
var response = false;
lock(_locker) {
response = _canSend;
}
return response;
}
public static void ChangeSendState(bool canSend) {
lock(_locker) {
_canSend = canSend;
}
}
}
public class MyController {
[HttpGet]
public void SendMail()
{
var emails = db.Emails.ToList();
foreach (var email in emails)
{
//code for sending mail here...
if (!EmailSenderContext.CanSend())
break;
}
}
[HttpGet]
public void StopMail()
{
EmailSenderContext.ChangeSendState(false);
}
}
你要知道,這隻會在一臺服務器上運行。當您希望這是一個全局標誌時,您需要引入一個數據庫來存儲該值,並且每次檢查時都需要訪問該數據庫值。
這是一個OVERLY簡化的例子,並與許多系統,將無法正常工作。如果這對於只能在單個服務器上運行並且沒有不同使用訪問權限的工作項目來說是一件小事情,那麼它將起作用。再一次,因爲這是一個共享的上下文,所有用戶都可以通用訪問該值。
你可以不喜歡這個停止定時器 - 控制器是爲每個請求一次性使用。 –
您可以創建一個服務來發送郵件並創建該服務單例(使用單例模式或DI框架)。 –
@ DanielA.White然後我應該採用什麼方法 –