如何在TPL Dataflow中分支逻辑?

jmi*_*has 4 .net c# task-parallel-library tpl-dataflow

我是TPL数据流的新手,请原谅我,如果这是一个简单的问题.

我有一个输入缓冲区块,它采用基类.如何根据派生类型从那里分支到块?例如:

var inputBlock = new BufferBlock<EventBase>();
//if EventBase is Meeting then go to block X
//if EventBase is Appointment the go to block Y
Run Code Online (Sandbox Code Playgroud)

谢谢!

i3a*_*non 6

您可以向LinkTo方法发送谓词以区分项目.但是,您需要从EventBase每个块内部向下转换以使用特定于该类型的逻辑:

var inputBlock = new BufferBlock<EventBase>();
var meetingBlock = new ActionBlock<EventBase>(
    eventBase =>
    {
        var meeting = eventBase as Meeting;
        //...
    });
var appointmentBlock = new ActionBlock<EventBase>(
    eventBase =>
    {
        var appointment = eventBase as Appointment;
        //...
    });

inputBlock.LinkTo(meetingBlock, eventBase => eventBase is Meeting);
inputBlock.LinkTo(appointmentBlock, eventBase => eventBase is Appointment);
Run Code Online (Sandbox Code Playgroud)

但是,正如Servy指出的那样,你应该避免这种情况并设计你的类型以支持多态性.