2011-03-20 3 views
2

사용자가 .aspx 페이지를 방문하면 새 스레드에서 백그라운드 계산을 시작해야합니다. 계산 결과는 콜백에서 결과를 검색 할 수 있도록 사용자의 Session에 저장해야합니다. 또한 콜백에서 백그라운드 계산의 상태를 볼 수 있어야합니다. 예 : 계산이 완료되어 성공적으로 완료되었는지 또는 아직 실행 중인지 확인해야합니다. 어떻게해야합니까?asp.net (C#)의 스레드

질문 내가 스레드의 상태를 확인 할 방법

  1. ? 여러 사용자가 백그라운드에서 동시에 계산을 수행 할 수 있으므로 어떤 스레드가 어떤 스레드에 속하는지 알 수있는 프로세스가 어떻게 작동하는지 확신 할 수 없습니다. (내 시나리오에서는 중요한 스레드는 원래 시작된 스레드입니다. 사용자 A - 사용자 A는 해당 스레드의 상태를 검색/확인하기 위해 콜백을 수행합니다.
  2. 내 생각에 HttpSessionState "세션"변수를 새 스레드에 전달하면 예상대로 작동합니다 (예 : 나중에 세션에 항목을 추가 할 수 있음).

감사합니다. 또한 나는 뭔가에 대해 혼란 스러울 지 모르지만 SO 로그인 시스템이 다르기 때문에 기존 계정에 액세스 할 수 없다고 이야기해야합니다.

편집

지금 기본적으로 스레드의 목록을 관리 클래스와 싱글 톤을 사용 this article에 설명 된 방법을 사용하는 방법에 대해 생각하고 있어요. 데이터베이스에 내 데이터를 저장하는 대신 (데이터를 검색하는 것과 관련된 성능 저하와 데이터베이스의 추가 테이블, 유지 관리 등), 클래스에 데이터를 저장할 것입니다.

편집 2

내 첫 편집에서 언급 된 접근 방식은 잘 작동. 또한 스레드와 관련 데이터가 정리 타이머라는 메서드를 호출 한 후에 정리할 수 있도록 타이머가 있습니다. 내 데이터와 스레드를 포함하는 객체는 Singleton 클래스에 저장되었습니다. 일부 응용 프로그램의 경우 데이터베이스를 저장소로 사용하는 것이 적절할 수 있지만 내 데이터는 페이지의 특정 인스턴스에 연결되어 있으므로 해당 페이지 컨텍스트 외부에서는 쓸모가 없습니다.

+0

로그인 시스템에 변화가 없었습니다. 어쨌든 바닥 글에서 "문의하기"를 클릭하고 팀에 귀하의 계정을 병합하도록 요청하는 이메일을 보낼 수 있습니다. –

+0

이전 계정을 더 신랄하게 만들 수 있다면 (아마도 게시물 찾기), 우리는이를 수정할 수 있습니다. "명백한"단일 일치는 없지만 몇 가지 가능성이 있습니다 ... –

+0

백그라운드 스레드에서 어떤 작업을하고 있습니까? 너무 오래 당신의 넥타이를 어떻게 든 현재에는 아무런 문제가 없어야합니다. 배경 계산이 아직 실행 중인지 확인하는 것보다 완료 될 때 다른 이벤트를 시작하는 것이 더 낫겠습니까? – timothyclifford

답변

2

나는 이 아니며이 시나리오에서 세션 상태가 계속 작동 할 것으로 예상합니다. 작업자는 사용자가 누구인지 전혀 알지 못하지만 (경우에 따라서는이 데이터를 작업자에게 가져올 가능성이 있음) 아무 것도 저장할 이유가 없습니다 (업데이트 세션은 요청 파이프 라인의 끝으로 향하는 단계이지만 그렇지 않다면 파이프 라인 ...?).

사용자의 고유 한 속성 (ID 또는 CN)을 사용하여이 데이터를 별도로 저장해야하거나 그렇지 않은 경우 GUID를 생성해야 할 수도 있습니다. 단일 컴퓨터에서는 동기화 된 사전 (또는 이와 유사한)에 저장할 수 있지만 팜/클러스터에서는 계층 아래로 데이터를 데이터베이스 또는 상태 서버로 푸시해야 할 수 있습니다. 수동으로 가져 오기.

+0

감사합니다. 이 시나리오에서 Session을 사용할 수 없다면 데이터베이스 테이블을 사용하고 거기에 데이터를 저장하는 백그라운드 스레드를 사용할 수 있다고 가정합니다. 사용자의 백그라운드 스레드 상태를 확인하는 방법은 다음과 같습니다. 그렇게 할 수있는 메커니즘이 있습니까? C# 스레드 (class = Thread)에 ID 속성이 있으므로 사용자 스레드의 상태를 조회하는 비슷한 방법을 찾고 있습니다. – KyleM

+0

@KyleM - 아마도 DB를 사용할 수 있을까요? 특히 여러 서버가있는 경우 ... –