簡體   English   中英

從多個來源並行產生數據

[英]yielding data from multiple sources in parallel

我有一種情況,我想異步地從多個來源流式傳輸相同類型的數據。 數據結果應隨其輸入而消失。最簡單的方法是什么? 收益回報率受阻,所以這沒有做我想要的。 在下面的示例中,我希望源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();
    }
}

您可以同時進行操作-使用BlockingCollection和一些線程。 每個輸入一個線程,一個(可能是您的主線程)該線程屈服返回列表中的項。

請注意,您可能未到達列表的末尾-如果您的讀者的速度比作家快,那么即使作家以后會向列表中寫入更多數據,它也會認為到達列表的末尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM