문제

내 기본 가정은 다음과 같습니다.

  1. Wcf는 일반 ThreadPool 스레드(QueueUserWorkItem) 대신 IOCP 스레드(UnsafeQueueNativeOverlapped)에서 내 서비스 작업 메서드를 실행합니다.

  2. I/O를 차단해야 합니다. ~ 아니다 단방향 서비스 운영 방법 내에서 수행됩니다.

  3. I/O를 차단해야 합니다. ~ 아니다 일반 ThreadPool 스레드 내부에서 수행됩니다.

나는 가장 좋은 전략은 다음과 같다고 생각한다. 체인 비동기 호출.따라서 단방향 서비스 작업에 대한 메시지를 받으면 DB에 비동기 호출을 수행하고 완료되면 다음 비동기 DB 호출 등을 수행합니다.마지막으로 내 wcf 콜백을 통해 응답합니다 ...

그러나 모든 단일 데이터베이스 호출을 비동기식으로 수행하는 것은 어렵습니다.나는 위의 규칙 2와 3을 위반했지만 결국에는 ThreadPool이 고갈될 것이라고 믿기 때문에 마음에 들지 않습니다.더 좋은 전략이 있나요?

Jon Skeet의 CustomThreadPool을 사용해 보았지만 그것이 답인지 확실하지 않습니다.

도움이 되었습니까?

해결책

ThreadPool이 수행할 동기식 I/O 호출을 대기열에 추가하여 규칙 3을 깨는 것이 좋습니다.서비스 메서드는 여전히 즉시 반환되지만 작업은 결국 백그라운드에서 완료되어 반환 알림이 시작될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top