이것은 두포에서 진행되는 작업에 대한 이해가 부족하거나 일반적으로 스레딩에 대한 이해가 부족하기 때문일 수 있습니다. 사용자가 로그인하면 웹 서비스를 호출하는 일부 작업을 실행하여 시스템의 데이터를 업데이트해야합니다. 서비스는 상당한 시간이 걸릴 수 있기 때문에 전체 프로세스를 처리합니다. 그러나, 비록 내가 전체 응용 프로그램과 별도의 스레드에서 일련의 작업을 실행한다고 생각하더라도 응용 프로그램은 호출되기 전의 함수가 완료 될 때까지 대기합니다.ThreadPool.QueueUserWorkItem이 종료 될 때까지 응용 프로그램이 멈추는 원인이 될 수 있습니다.
WindowsIdentity identity = WindowsIdentity.GetCurrent();
Manager manager = (Manager)Session["Manager"];
ThreadPool.QueueUserWorkItem(new SafeWaitCallback().Call(identity, delegate(object noCallBack)
{
manager.RunAccountUpdater(identity);
}));
"RunAccountUpdater"함수가 끝나고 콜백이 발생할 때까지 응용 프로그램이 중단됩니다. 내가 뭘 잘못하고/이해하지 못하고 있니?
관련 스레드 동기화 코드가 있습니까? 어울리다? 자물쇠? 뮤텍스? Control.Invoke와 비슷한 것은 무엇입니까? 차단할 수있는 다른 것은 없습니까? –
명백한 것은 없습니다. – Chris
'새 SafeWaitCallback(). 통화가 동 기적으로 실행됩니다. 그 결과 (WaitCallback이라고 가정 함) 만 ThreadPool에서 스케줄됩니다. 응용 프로그램을 차단하는 새로운 SafeWaitCallback(). Call이 아닌'manager.RunAccountUpdater'입니까? 'SafeWaitCallback' 클래스의 전체 코드를 추가 할 수 있습니까? ([this] (http://flimflan.com/blog/SafelyRunningBackgroundThreadsInASPNET20.aspx)와 비교하여 수정 한 것 같습니다. – dtb