2014-02-13 6 views
0

사용자는 반복적으로 정보를 얻기 위해 대형 데이터베이스를 쿼리해야합니다. 이것은 비동기 적으로 수행됩니다. 한 번에 하나의 쿼리 만 실행됩니다..Net, 긴 비동기 작업

나는이 여러 초 동안 스레드 풀 스레드를 묶어 것 같이 내가 ThreadPool.QueueUserWorkItem을 사용하지 않은 등의 코드가 덜 maintable 덜 깨끗한 것입니다 각 쿼리에 대한 새 스레드,

를 만들고, 나는하지 않았다 모든 사용자가 사용하지 않기 때문에, ThreadPool.SetMinThreads을 통해 최소 ThreadPool 스레드를 증가시키지 마십시오.

난 그냥 항목을 처리 내 자신의 단일 스레드 "ThreadPool"을 작성 하여이 문제를 해결했습니다. 새로운 스레드가 생성되지 않았으며, ThreadPool 스레드가 점유되지 않았습니다.

나는 ThreadPool을 피해야할까요? 다른 접근 방식을 취해야합니까?

편집 : 나는, 3.5, 2010 년

+1

정확히 'async' /'await'가 무엇을위한 것입니까? 너 탐험 해봤 니? –

+0

예. 나는 .net 3.5와 Visual Studio 2010으로 제한되어 있습니다. 3.5에서 Async/await을 사용할 수 있습니까? 몇 주 전에 async/awat를 사용할 수 있도록 패키지를 다운로드하려고 시도했지만 성공하지 못했습니다. –

+0

지금 가지고있는 코드를 보여줄 수 있습니까? 당신을위한 예제를 쉽게 만들 수 있습니다. –

답변

1

내가 여러 초 동안 스레드 풀 스레드를 묶어 것이로 ThreadPool.QueueUserWorkItem 사용하지 않은 비주얼 스튜디오 닷넷으로 제한하고

ThreadPool이 이미 매우 바쁜 경우에만 (작은) 문제가 발생합니다. 그러나 그럼에도 불구하고 단일 스레드를 '쪼그리고 앉는'것이 실제 문제는 아닙니다.

그렇다면 자신의 ThreadPool을 만들지 마십시오. 그것은 아무 것도 해결하지 못하는 많은 복잡성을 추가합니다.

+0

나는 동의하지 않는다. 내 코드는 대규모 프로젝트의 작은 부분입니다. 다른 개발자가 같은 생각을 갖고 스레드 풀에서 2 개의 스레드 만 사용할 수 있다면 어떻게됩니까? 아주 나쁘다. 쓰레드 풀을 사용하는 모든 것은 지금 기다려야한다. 나는 C#의 Threadpool이 이와 같은 작업을 의미하지 않는다고 생각한다. –

+0

기본 MaxThreads는 Fx 3에서는 50이었고 Fx4에서는 1000이었습니다. 문제는 상상할 수 있습니다. –

+0

오! 나는 기본값을 찾아 볼 생각이 전혀 없었다. 기본 최대 값이 매우 낮다고 가정합니다. 고마워, 그건 내 문제를 해결. 내가 쓰레드 풀을 사용해야한다고 생각해. –