2012-06-25 4 views
1

ASP.NET MVC에서 응용 프로그램이 시작될 때 백그라운드에서 일부 연결 (LDAP, ...)이 필요합니다. ASP.NET MVC 응용 프로그램에서이 "스레드 안전성"을 수행 할 수있는 방법이 있습니까?ASP.NET MVC에서 스레드 안전성

감사합니다, 여기

답변

2

AS.NET의 경우 avoid running background tasks이어야합니다. 그러나 어떤 이유로 든해야한다면, Application_Start에 새 스레드를 시작하여 이러한 작업을 수행 할 수 있습니다. Application_Start은 한 번만 실행되기 때문에이 스레드는 한 번 실행됩니다 (물론하지 말아야 할 타이머를 구성하지 않는 한).

반면에 HTTP 요청 컨텍스트 내에서 실행되는 ASP.NET MVC 컨트롤러에서이 백그라운드 스레드에서 수행 한 작업을 소비해야하는 경우 적절한 동기화가 필요합니다. 스레드는 Application_Start에서 시작되었습니다. 정확한 시나리오에 따라이를 달성 할 수있는 다른 방법이있을 수 있습니다.

+0

조치가 1 분이 걸리면 응용 프로그램은 Application_Start?에서 1 분 동안 멈추었습니까? 이 문제를 피하고 싶습니다 –

+0

이 경우 새 스레드를 실행하고 스레드 내부에서이 작업을 수행 할 수 있습니다. 하지만 내가 말했듯이 컨트롤러 내부에서이 배경 스레드의 결과를 소비해야하는 경우 문제가 발생하며 동기화해야합니다. –

0

는 기본적으로 우리가 연결을 시작하는 기능을 Invoke합니다 익명 delegate을 작성, 그것을해야하는지 샘플입니다.

if(this.InvokeRequired) 
{ 
    Invoke(new MethodInvoker(() => yourFunctionThatCreatesSomeConnections(Args))); 
} 
else 
{ 
yourFunctionThatCreatesSomeConnections(Args); 
} 
+1

그는 WinForms 또는 WPF가 아닌 ASP.NET에 관해 묻습니다. InvokeRequired 나 Invoke 메소드는 없습니다. –

+0

http://stackoverflow.com/questions/1103745/thread-safety-in-asp-net-mvc – Mayank

+1

내가 본 링크가 당신이 보여준'InvokeRequired'와'Invoke' 메쏘드와 관련이없는 것 같습니다 당신의 대답에. –