【发布时间】:2014-02-14 22:01:45
【问题描述】:
我正在学习 TPL 数据流,我通过我的一些朋友看到了它的强大功能,但我的实施遇到了问题。
我想要/需要的是尽可能快地发送消息。我正在 LinqPad 中做一些原型设计,这就是我目前所拥有的:
// Holds all the messages for my loadMessage ActionBlock to grab its data from
var bufferBlock = new BufferBlock<string>();
// Sends message to where it needs to go as fast as it can.
var loadMessage = new ActionBlock<string>(msg =>
{
msg.Dump();
},
new ExecutionDataflowBlockOptions
{
MaxDegreeOfParallelism = DataflowBlockOptions.Unbounded
});
// Links the blocks together
bufferBlock.LinkTo(loadMessage);
// Loads the Buffer
for (int i = 0; i < 10; i++)
{
bufferBlock.Post("This is a message");
}
//Calls completion to stop threads
bufferBlock.Complete();
loadMessage.Complete();
问题是 loadMessageBlock 没有在上面的示例中转储消息。我一直在寻找一些见解,但运气不佳。我认为我遗漏了 TPL 的一些基本内容。我的理解是 BufferBlock 保存要由其他块处理的信息,而 ActionBlocked(与 BufferBlock 链接)应该从缓冲区中获取数据并做它需要做的事情。在将信息放在缓冲区上的 For 循环停止完成后,将调用停止线程。
在我的实现中,我有一个 Parallel.For 可以很好地运行我的 loadMessage 中的代码。我只是无法实现 TPL 来做我想做的事,我的理解是 TPL 会比 Parallel.For 更快。
我认为这应该如何工作?我是否误用了 TPL?我将继续研究答案,任何指针将不胜感激。谢谢!
【问题讨论】:
标签: c# multithreading task-parallel-library tpl-dataflow