【发布时间】:2010-12-05 19:49:33
【问题描述】:
我一直在使用 Tasks 和 BlockingCollections,它们做得很好。但据我了解, Take() 方法会删除队列中的对象。但是,如果您希望 2 个任务同时访问相同的值怎么办?
假设我正在读取一个文件,并通过blockingCollection.Add() 将每一行发送到2 个任务,但我希望两个任务以相同的顺序获取相同的行。 (每个任务会对同一行执行不同的操作)
我该怎么做呢? BlockingCollection 可以做到这一点吗?还是我使用事件来传递值?如果是这样,请说明如何在另一个任务/线程中触发任务/线程的事件。
[编辑] 如果我这样做会怎样:
while (!lineCollection.IsCompleted)
{
Line line = lineCollection.Take();
//do my processing
//then I add the original line back to the collection
lineCollection.Add(line);
//and use a "wait one" to wait for T2 to Take this line aswell
//Then continue my while loop
}
不是很优雅...它也不能保证同步。
【问题讨论】:
标签: c# multithreading synchronization