2014-04-30 5 views
3

아래의 TPL 데이터 흐름 네트워크 구성표를 살펴보십시오. URL 목록, 여러로드 블록 및 Parse 블록이 있습니다. 로드 블록은 다른 프록시 서버와 함께 HTML 페이지를로드하고 모두 CPU 바인딩 작업이 발생하는 Parse 블록에 링크됩니다. 페이지 로딩 중에 예외가 발생하면 URL이 목록에 다시 추가됩니다.TPL 데이터 흐름을 선택하여 항목을 게시하십시오.

URL을로드 블록에 수작업으로 게시합니다 (그림에 표시). 내 질문 : 직접 만든 블록을 URL로 게시하려면로드 블록을 선택하는 데 도움이되는 블록 유형이 있습니까? 예를 들어 .InputCount < = 2로 첫로드 클럭에 URL을 게시합니다.

그리고 한 번 더. 데이터 흐름 실행 중에 프록시 서버를 사용할 수 없게 될 수 있습니다. 만약 URLBufferBlock을 URL List 대신에 배치한다면, LoadBlocks가이 BufferBlock에서 죽은 프록시와 동적으로 연결을 끊을 수있을 것입니다. 그렇다면 블록을 네트워크에서 동적으로 연결 해제 할 수있는 방법이 있습니까?

Dataflow network scheme

답변

3

어떤 블록 타입은 그 URL에 대신 내 손으로 만든주기를 게시로드 블록을 선택하는 도움을 줄 수 있나요? 예를 들어 .InputCount < = 2로 첫로드 클럭에 URL을 게시합니다.

당신이 할 수있는 일은 모든로드 블록에 연결된 하나의 BufferBlock입니다. 그런 다음로드 블록 중 BoundedCapacity을 3 (처리중인 항목 1 개와 입력 및 출력 대기열에서 2 개)으로 설정합니다. 이 설정을 사용하면로드 블록 중 하나에서 공간을 사용할 수있을 때까지 항목이 BufferBlock에서 대기합니다.

동적으로 블록을 네트워크에서 연결 해제하는 방법은 무엇입니까?

예, LinkTo() (Dispose()를 호출하여) 해당 링크를 파괴하는 데 사용할 수있는 IDisposable 반환합니다.

+0

고마워, svick! 모두 잘 작동합니다. 나는 그주기를 디버깅하는 데 2 ​​주일을 낭비했고, 지금은 몇 줄로 바꿨다. – AsValeO

+0

이제 'LinkTo'가 'Disposed'인지 확인하는 방법을 알 수 없습니다. 개인 속성 인 것처럼 보입니다. 이런 식으로 남아있는 'TransformBlocks'이 없는지 확인해야합니다. – AsValeO

+0

@ValeO 스스로 추적해야한다고 생각합니다. 예를 들어,'IDisposable's,'Dispose()'의 콜렉션을 가지고 콜렉션에서 동시에 제거하면됩니다. – svick

관련 문제