作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 TPL 数据流的新手,如果这是一个简单的问题,请原谅我。
我有一个采用基类的输入缓冲 block 。我如何从那里分支到基于派生类型的 block ?例如:
var inputBlock = new BufferBlock<EventBase>();
//if EventBase is Meeting then go to block X
//if EventBase is Appointment the go to block Y
谢谢!
最佳答案
您可以将谓词发送到 LinkTo
方法以区分项目。但是,您需要从每个 block 内的 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);
但正如 Servy 指出的那样,您应该避免这种情况,并设计您的类型以支持多态性。
关于c# - 如何在 TPL 数据流中分支逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25626228/
我是一名优秀的程序员,十分优秀!