IIS에서 비동기 처리를 사용하고 싶습니다. 편집 : 나는 작업 병렬 라이브러리를 사용하는 방법에 대해 이야기하고있다.IIS에서 스레드를 사용하기위한 특별 고려 사항
예를 들어 특정 페이지를로드 할 때 많은 쓰레기를 로그하고 이메일을 보내고 일부 테이블을 업데이트하려고합니다.하지만 사용자가 모든 허위 기록을 기다리게 할 수는 없습니다.
정상적으로 내가하는 일은 정적 정보 대기열을 사용하여 로그 정보를 보낸 다음 OnLoad가 대기열을 플러시하는 10 분마다 특수 페이지를 호출하는 크론 작업을 수행하는 것입니다. 이 방법이 효과적이지만, 특히 50 가지를 기록하려는 경우에는 설치하기가 어렵습니다. 나는 이것을 다음과 같이하고 싶습니다.
Task.CreateNew(() => Log(theStuff));
그러나 IIS가 실행 중일 때마다 작업이 중단되고 전체 웹 사이트가 다운되기 때문에 겁나는 일이 있습니다.
그래서 지금은
SafeTask.FireAndForget(() => Log(theStuff));
이 일부 시도/캐치에 대리자를 래핑하고 Task.CreateNew로 전달합니다. 그래서 누군가가 실수로 태스크 스레드에 던져지는 예외를 생성하는 다른 것에 영향을주는 무언가를 변경하면 우리는 추락 한 웹 사이트 대신 알림을 받게됩니다. 또한 캐치 내부의 오류 알림도 자체 try/catch 내부에 있으며 캐치에는 try/catch가있어 다른 방식으로 로그인하려고합니다.
이제 안전하게 IIS에서 물건을 실행할 수 있습니다. 내 SafeTask 클래스를 사용하기 전에 걱정할 사항이 있습니까?
IIS의 스레드를 사용할 때는주의하십시오. IIS는 이미 스레드를 사용하여 개별 요청을 처리하며 사용 가능한 총 수에 제한이 있습니다. –
@joel 이걸로 새 스레드를 만들면 IIS의 한계를 없앨 수 있습니까? – dan
IIS 제한이 아닌 OS 제한입니다. –