7

다음은 시나리오입니다. 사용자 로그인시 IMAP 유휴 상태의 메일 알림을 수신하는 작업을 시작하고 messager (푸시 알림의 종류)를 통해 클라이언트와 실시간 연결됩니다. 이제 문제는이 작업을 취소하는 방법입니다. 사용자 취소 푸시 알림 또는 로그 아웃 ..웹 요청을 통해 비동기 작업을 취소하는 방법은 무엇입니까?

EDIT : 예를 들어 5 명의 사용자가 사이트에 로그온 한 경우 5 개의 작업이 실행 중입니까? 그래서 어떻게 개별 작업을 취소합니까.

+0

당신은'Task' 프로세스가 웹 서비스 또는 Windows 서비스에서 실행되고 있는지 또는 그 밖의 것들이 있습니까? –

+1

안녕하세요 @HarshBaid 작업이 mvc 응용 프로그램 내에서 실행 중입니다. – Iternity

답변

1

비동기 노동자 취소를 지원하도록 수정해야

http://www.csharp-examples.net/cancel-asynchronous-method/

또한 조금 덜 복잡 배경 노동자를 사용할 수 http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.cancelasync.aspx

나는 발생한 문제는 당신이 보낼 때 이미 작업을 시작한 외부 소스 (DB, app)로 취소하십시오. 취소를 지원하지 않으면 작업이 완료 될 때까지 기다려야 할 수도 있습니다.

EDIT : MVC에서는이 작업을 한 적이 없지만 MVC4에서 CancellationToken 매개 변수를 사용하는 asycn 프로세스에 '취소 토큰 사용'에 대한 좋은 기사가 있습니다. http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4 도움이 되길 바랍니다.

1

작업을 만들 때마다 취소 토큰을 만들어 전달해야합니다. 각 사용자는 작업과 연결되어 있으므로 사용자의 세션에 작업 및 취소 토큰을 저장할 수 있습니다.

사용자 세션에 저장된 취소 토큰을 사용하면 로그 아웃하거나 취소 버튼을 누르면 작업을 쉽게 취소 할 수 있습니다.

작업 취소에 대해서는 post을 참조하십시오.

+0

감사합니다. @ 마크. 나는 토큰을 저장하는 것에 대해 생각해 보았지만 직렬화 할 수 없을 때 어떻게 저장합니까? – Iternity

+0

@Iternity 당신은 out-of-proc 세션 상태를 사용하고 있습니까? 당신은 질문에서 그 말을하지 않았습니다. – VJAI

+0

In-Proc 세션을 사용하고 있습니다. 어떻게 차이를 만들지 모르겠다. 설명을 부탁드립니다. – Iternity

0

프로세스가 사용자의 작업없이 자살 할 수 있습니다. 다른 스레드 (파일)에서 변수를 교환하는 가장 쉬운 방법입니다. 클라이언트 브라우저가 아직 열려 있다고 가정하면, 서버에 타임 스탬프를 파일에 기록하는 javascript 타이머 호출 Ajax 요청이 있습니다. 당신의 작업은 주기적으로 파일을 읽으며, 타임 스탬프가 너무 오래되면 프로세스가 스스로를 죽입니다. 선택한 활동 시간 제한 값입니다.

관련 문제