2011-09-07 6 views
2

아래의 요구 사항 중 하나가 asp.net mvc 응용 프로그램에서 일하고 있습니다.Asp.net mvc 비동기 작업 처리

시나리오 : 사용자가 장기 실행 작업을 처리하라는 요청을 제출합니다. 작업은 서버 측에서 시작되어야합니다. 작업 완료를 기다리지 않고 작업이 완료되면 전자 메일 알림이 전송된다는 응답이 사용자에게 전송되어야합니다.

이것은 비동기 처리의 시나리오 인 것으로 보입니다. 처음에는 비동기 델리게이트 사용을 생각했지만 비동기 델리게이트가 백그라운드 스레드로 실행되며 주 스레드가 종료되면 살아남지 못한다는 사실을 알게되었습니다. 내게는 일단 응답이 사용자에게 보내지면 주 스레드가 종료되므로 배경 스레드로. 내가 틀렸다면 나를 바로 잡아라.

그래서 전 Thread 클래스를 사용하여 전경 스레드를 만드는 방법을 생각했습니다. 그러나 내가 읽은 기사 중 하나에서 asp.net은 전경 스레드인지 아닌지 여부와 유용하지 않을 것으로 보지 않습니다. 사실입니까?

현재 다음과 같은 중재인을 찾고 있습니다.

  1. 제안 asp.net의 외부 태스크 처리 로직을 이동 및 콘솔 응용 프로그램/서비스 에 넣고 MSMQ에 asp.net에서 메시지를 눌러 응용 프로그램을 알려 주시기 바랍니다. 메시지가 수신되면, 콘솔 응용 프로그램은 처리를하고 보내는 전자 메일 알림을

  2. WCF 서비스를 메시지를 수신하고 처리를

다른 더 좋은 생각을 공유하시기 바랍니다 것입니다

감사합니다,

Sveerap는

+0

나는 그것을 알지 못했지만 2 가지 해결책 중 하나는 나에게 잘 어울린다. –

답변

0

당신은 간단하게 사용할 수 있습니다

ThreadPool.QueueUserWorkItem(o => 
            { 
             // do something aync 
            }); 

Previous comments on this:

이 (사실입니다)하고 에 의해 스레드 요청 풀을 굶어에 대한 인수가 많이 있습니다

하지만 카운터 인수는 서버 사용량이 때문에 풀을 굶어한다입니다 일하는 중. 물론 이상적으로는 대기열/분산 시스템 등을 통해 다른 서버로 작업을 이동해야하지만 이는 복잡한 솔루션입니다. 요청이 수백 번 처리되어야하는 경우가 아니면 이 옵션을 고려할 필요가 없습니다. 문제가 발생할 가능성이 거의 없으므로이 옵션을 고려하지 않아도됩니다. 실제로 은 솔루션의 확장 성 요구 사항, 백그라운드 프로세스가 얼마나 오래 걸릴지 그리고 얼마나 자주 호출되는지에 따라 다릅니다.

+0

ThreadPool.QueueuserWorkItem은 백그라운드 스레드를 만들고 메인 스레드가 완료되면 백그라운드 스레드가 존재하지 않으므로 위의 시나리오에서 문제가 발생하지 않을 것이라고 생각합니까? – sveerap

+0

아니요. 확실히 그렇지 않습니다. 스레드 풀에서 새 스레드를 만들고 요청 스레드를 종료 할 수 있습니다. – TheCodeKing

+0

답장을 보내 주셔서 감사합니다.하지만 스레드 풀 스레드가 백그라운드 일 때 스레드가 전혀 종료되지 않는다고 어떻게 말할 수 있습니까? – sveerap