공유 컨텍스트를 허용하는 항목이 있어야합니다. 컨트롤러는 기본적으로 자체 컨트롤러를 갖습니다.
당신은 사용하려면이에 대한 공유 컨텍스트 주위에 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 단순화 된 예제이며 많은 시스템에서 작동하지 않습니다. 다양한 사용 권한이없는 단일 서버에서만 실행되는 작업 프로젝트의 경우 작은 작업 인 경우 작동합니다. 다시 말하지만, 이것은 공유 된 컨텍스트이므로 모든 사용자는 값에 대한 일반 액세스 권한을 갖습니다.
(API 입력으로 거짓 동안) 이메일 전송을 중지 할 때 타이머를 중지 - 컨트롤러가 각 요청에 대해 한 번 사용하는 것입니다. –
메일을 보내고 그 서비스를 싱글 톤 (싱글 톤 패턴 또는 DI 프레임 워크)으로 만드는 서비스를 만들 수 있습니다. –
@ DanielA.White 그러면 어떤 접근 방식을 채택해야합니까? –