我有一种情况,我想异步地从几个来源流式传输相同类型的数据。数据结果应该在它们进入时出现。最简单的方法是什么?收益率回报是阻塞所以这不是我想要的。在下面的示例中,我希望源B中的数据在源A的数据之前输出。
List<string> GetComputerRecordsFromA(int computerId)
{
Thread.sleep(100);
return new List<Record> {"Record1","Record2","Record3"};
}
List<int> GetComputerRecordsFromB()
{
return new List<int> {"Record1","Record2","Record3"};
}
IEnumerable<List<int>> GetDataBlocks()
{
//How to yield out in the order data comes available??
var computerIds = new List<int> {1,3,99,4};
foreach(int id in computerIds)
{
yield return GetDataFromA();
yield return GetDataFromB();
}
}
答案 0 :(得分:1)
您可以同时执行操作 - 使用BlockingCollection
和几个线程。每个输入一个线程,一个 - 可能是主线程 - 从列表中返回项目。
请注意,您可能无法到达列表的末尾 - 如果您的读者比作者更快,它会认为它已到达列表的末尾,即使作者稍后会将更多数据写入列表。 / p>