【发布时间】:2011-11-16 00:55:43
【问题描述】:
如何在下面的 Update() 方法中创建 do-while 或类似的并行等效项?
应用程序中的另一个线程随机写入TestBuffer。 TestBuffer.RemoveItemAndDoSomethingWithIt(); 应该一直运行到 TestBuffer 为空。目前Update() 仅与枚举时集合中的项目一起运行,这是有道理的。
internal class UnOrderedBuffer<T> where T : class
{
ConcurrentBag<T> GenericBag = new ConcurrentBag<T>();
}
internal class Tester
{
private UnOrderedBuffer<Data> TestBuffer;
public void Update()
{
Parallel.ForEach(TestBuffer, Item =>
{
TestBuffer.RemoveItemAndDoSomethingWithIt();
});
}
}
【问题讨论】:
-
你的意图是什么?您是希望多个线程处理 TestBuffer 还是要在后台线程中异步处理 TestBuffer。
-
TestBuffer 应该使用可用的内核尽快清空。
标签: c# parallel-processing plinq