2015-08-28 8 views
5

कस्टम शेड्यूलर बनाना संभव है जो IObservable के माध्यम से गुजरने वाले प्रत्येक तत्व के मूल्य का निरीक्षण कर सकता है, ताकि यह तय किया जा सके कि आइटम को किस प्रक्रिया को संसाधित करना है?प्रतिक्रियाशील एक्सटेंशन (आरएक्स) कस्टम शेड्यूलर सी #

मुझे समान कुंजी के साथ समान रूप से समान कुंजी के साथ आइटम को संसाधित करने की आवश्यकता है लेकिन समानांतर में अलग-अलग कुंजी। यह समझ में आता है कि RX को प्रत्येक मान को थ्रेड में आवंटित करने के लिए पहले से अधिक देखने योग्य के बजाय शेड्यूलिंग करना है।

उत्तर

7

क्या आपने GroupByObserveOn के बाद प्रयास किया है?

कुछ की तरह:

source 
    .GroupBy(item => item.Key) 
    .SelectMany(group => group 
     .ObserveOn(Scheduler.NewThread) 
     .Select(item => process(item)) 
    ) 
    .Subscribe(processResult => ...); 

यह कुंजी द्वारा धारा विभाजन होगा, प्रत्येक कुंजी के लिए एक नया धागा शुरू, और है कि कुंजी में प्रत्येक आइटम के लिए process() चलाते हैं।

+1

यह बहुत अच्छा है। मैंने अभी LINQPad में एक परीक्षण चलाया और यह खूबसूरती से काम करता है। मुझे इसे कभी-कभी इस्तेमाल करना चाहिए। – Enigmativity

+0

सुरुचिपूर्ण लेकिन क्या होगा यदि हजारों कुंजी हैं? आदर्श रूप से एक शेड्यूलर थ्रेडपूल थ्रेड पर कार्यों का उपयोग करके क्रमशः उसी कुंजी के साथ आइटम को संसाधित कर सकता है? – benthemos

+1

निश्चित रूप से। आप इसके बजाय 'शेड्यूलर.डिफॉल्ट' का उपयोग करना चाहेंगे, जो आपके प्लेटफ़ॉर्म के आधार पर थ्रेडपूल या कार्य का उपयोग करेगा। – Brandon

संबंधित मुद्दे