2

2 가지 다른 소스에서 오는 2 가지 다른 데이터가 있는데 두 가지 다른 주파수에서 데이터가 합쳐져서 함께 처리해야한다고 가정 해 봅시다. 채널 A의 주파수는 100Hz (초당 100 정수)이며 채널 B의 주파수는 1Hz (초당 1 정수)입니다. 데이터는 TPL 데이터 흐름에서 ActionBlock을 사용하여 각 개별 채널에서 이미 처리됩니다. 이제는 함께 처리해야합니다 (A에서 1000 int 및 B에서 한 번에 5 int). 저에게 해결책은 채널 A (1000 정수)에서 1000 개의 메시지와 채널 B (5 개의 정수)에서 5 개의 메시지를 기다리는 BatchJoinBlock을 사용하여이 블록을 결합하는 것입니다. 일괄 처리가 채워지면 작업 블록으로 처리하고 처리합니다.TPL dataflow와 BatchJoinBlock이 서로 다른 배치 크기를 가지고 있습니다.

문제는 - 설명서에 따르면 BatchJoinBlock (MSDN)은 항상 동일한 크기의 모든 배치를가집니다.

다른 크기로 이동할 수 있습니까?

다른 대안으로, 크기가 다른 2 개의 BatchBlock 객체를 생성 한 다음 JoinBlock에 실행 시켜서 ActionBlock에 데이터를 보낼 수 있습니다. 그러나 그것은 잔인한 것 같이 보입니까? 아니면 일반적인 접근입니까?

두 가지 다른 채널의 조인을 구현하기 전에 지금은 이론적 인 접근 방법을 고려하고 있기 때문에 코드를 게시하지 않을 것입니다. 필요한 경우 신속하게 몇 가지 예를 노크 할 수 있습니다.

+2

두 가지 다른 BatchBlock 아이디어가 최선의 선택이라고 생각합니다. 나는 그것에 추가 할 것이 아무것도 없다. – i3arnon

답변

2

당신은 혼자 힘으로 생각했습니다. BatchJoinBlock은 두 가지 유형이 있고 특정 크기의 배치를 원할 경우 두 유형의 항목을 같은 크기로 계산합니다.

한 가지 유형이 성공하고 두 번째 유형이 실패한 경우를 예로들 수 있습니다. n 결과의 일괄 처리를 만들려는 경우 성공 횟수와 실패 수에 관계없이 BatchJoinBlock을 사용하십시오.

BatchBlockJoinBlock에서 동일한 기능을 구현할 수 있기 때문에 요청하는대로 정확하게 수행 할 수있는 블록이없는 이유가 있습니다. Dataflow의 강점은 다양한 블록을 결합한 것이므로 정확히 그렇게해야한다고 생각합니다. (다른 기존 블록에서 BatchJoinBlock을 만들 수 없습니다.)

+0

올바른 접근법을 확인해 주셔서 감사합니다. 그리고 당신은 이유를 잘 설명했습니다. –