2013-05-21 7 views
0

저는 ParallelQueryable과 Parallel.ForEach를 내부적으로 사용하여 계산을 병렬화하는 .NET 라이브러리를 보유하고 있습니다.WebApi의 비동기 컨텍스트가 TaskParallel을 사용하여 라이브러리로 떨어지나요?

이제 해당 라이브러리는 WebApi 응용 프로그램에서 사용 중입니다. WebApi는 현재 요청에 대한 동시 액세스를 방지하기 위해 비동기 컨텍스트를 사용한다는 것을 알고 있습니다. 내 질문은 WebApi가이 컨텍스트를 사용하면 라이브러리의 내부 병렬 계산에 어떤 방식 으로든 영향을 미칠 것입니다 (예 : 계속 작업을 모두 "GUI"스레드에서 수행해야합니까?)?

+0

웹 API 호스트에서'Parallel.For'를 사용하는 것은 좋은 습관이 아닙니다. 프로세스가 몇 분이 걸릴 수있는 경우가 아니면 다른 옵션을 사용하는 것이 좋습니다. ASP.NET에서 사용하는 동일한 스레드를 훔쳐서 스레드 부족을 유발할 수 있습니다. – Aliostad

+0

@Aliostad :이 경우 WebApi 서버는 잠재적으로 장기 실행 계산을 웹 서비스로 실행하는 라이브러리 메소드를 노출합니다. 다중 스레드 라이브러리 코드가 자체 프로세스로 실행되도록 제안 하시겠습니까? – ChaseMedallion

+0

그 말이 아닙니다. 나는 서버에서 멀티 스레딩이 좋지 않다고 말하고있다. 조심해야 해. – Aliostad

답변

0

TPL이 당신이 묘사하는 방식대로 행동한다면 그것은별로 의미가 없을 것입니다. PLINQ와 Parallel.ForEach()의 전체 요점은 코드를 병렬로 실행하는 것입니다. 그리고 동기화 컨텍스트 (ASP.NET 또는 GUI 응용 프로그램에서)를 사용하여 Task을 실행하면 병렬로 실행되지 않습니다. 따라서 PLINQ, Parallel.ForEach()Task.Run()은 동기화 컨텍스트를 사용하지 않습니다.

관련 문제