मुझे वस्तुओं की एक धारा को वस्तुओं के बैचों की एक धारा में बदलने की जरूरत है, उन्हें प्रतिक्रियाशील एक्सटेंशन का उपयोग करके एक संपत्ति मूल्य के आधार पर समूहित करना:

class Record
{
    public string Group;
    public int Value;
}

IObservable<List<Record>> Process(IObservable<Record> source, TimeSpan timeout)
{
    // ...
}

इनमें से कोई एक होने पर एक बैच समाप्त हो जाता है और आउटपुट स्ट्रीम में भेज दिया जाता है:

  • स्रोत स्ट्रीम से एक नई वस्तु आती है और इसका Group मान पिछले मान से भिन्न होता है
  • स्रोत स्ट्रीम में N सेकंड के लिए कोई नई वस्तु नहीं है

उदाहरण के लिए, यदि a1 का अर्थ new Record { Group = "a", Value = 1} है:

input:   -a1-a2-a3-b1-b2-
output:  -[a1, a2, a3]-[b1, b2]-

input:   -a1-a2----------a3-
output:  -[a1, a2]-------[a3]-

GroupByUntil, Debounce, Buffer, और Timer के विभिन्न संयोजनों का कोई फायदा नहीं हुआ। यह कैसे किया जाता है?

1
Impworks 22 फरवरी 2019, 21:01

1 उत्तर

सबसे बढ़िया उत्तर

चाल GroupByUntil के साथ Throttle का उपयोग करने की थी:

IObservable<List<Record>> Process(IObservable<Record> source, TimeSpan timeout)
{
    return source.GroupByUntil(x => x.Group, g => g.Throttle(timeout))
                 .SelectMany(x => x.ToList());
}
3
Impworks 22 फरवरी 2019, 20:26