당신이 찾고있는 것이 조인 블록이라고 생각합니다. 현재 두 개의 입력 및 세 개의 입력 변형이 있으며 각각은 튜플을 출력합니다. 이것들은 결합되어 8 개의 매개 변수 결과를 생성 할 수 있습니다. 또 다른 방법은 매개 변수를 보유하고 다양한 블록을 사용하여 매개 변수 클래스를 처리하고 구성하는 클래스를 만드는 것입니다. 두 점의 int를 결합하는 간단한 예
:
class MyClass {
BufferBlock<int> Xsource;
BufferBlock<int> Ysource;
JoinBlock<int, int> pointValueSource;
TransformBlock<Tuple<int, int>, Point> pointProducer;
public MyClass() {
CreatePipeline();
LinkPipeline();
}
private void CreatePipeline() {
Xsource = new BufferBlock<int>();
Ysource = new BufferBlock<int>();
pointValueSource = new JoinBlock<int, int>(new GroupingDataflowBlockOptions() {
Greedy = false
});
pointProducer = new TransformBlock<Tuple<int, int>, Point>((Func<Tuple<int,int>,Point>)ProducePoint,
new ExecutionDataflowBlockOptions()
{ MaxDegreeOfParallelism = Environment.ProcessorCount });
}
private void LinkPipeline() {
Xsource.LinkTo(pointValueSource.Target1, new DataflowLinkOptions() {
PropagateCompletion = true
});
Ysource.LinkTo(pointValueSource.Target2, new DataflowLinkOptions() {
PropagateCompletion = true
});
pointValueSource.LinkTo(pointProducer, new DataflowLinkOptions() {
PropagateCompletion = true
});
//pointProduce.LinkTo(Next Step In processing)
}
private Point ProducePoint(Tuple<int, int> XandY) {
return new Point(XandY.Item1, XandY.Item2);
}
}
그 출력을 생성하는 입력 버퍼 모두 사용할 데이터가 JoinBlock까지 기다릴 것이다. 또한이 경우 입력 버퍼에서 X와 Y가 순서대로 도착하지 않으면 다시 동기화해야합니다. 조인 블록은받은 첫 번째 X 값과 첫 번째 Y 값만 결합합니다.