2012-11-21 18 views
9

को एक IEnumerable > कन्वर्ट करने के लिए है वहाँ एक IObservable < टी > को एक IEnumerable < टास्क < टी > > कन्वर्ट करने के लिए रास्ते में ही बनाई गई। आदेश कोई फर्क नहीं पड़ता, बस मुझे चीजें मिलती हैं, हालांकि अधिमानतः वे पूरी हो जाती हैं। कैसे IObservable <T>

यदि यह अभी तक अस्तित्व में नहीं है, तो इसे पूरा करने का एक अच्छा तरीका क्या हो सकता है?

उत्तर

7

मेरा मानना ​​है कि इस

tasks.Select(t => Observable.FromAsync(() => t)) 
    .Merge(); 

प्रत्येक कार्य के लिए काम करेंगे जो कुछ भी क्रम में वे पूरा में नमूदार अनुक्रम करने के लिए अपने परिणाम भेज देंगे। आप अनुक्रम की सदस्यता ले सकते हैं और परिणाम के साथ जो भी चाहें कर सकते हैं।

1

मैं क्या आप हो सकता है के लिए Observable.Start()

फिर आप को समाप्त करने के .Subscribe(callbackMethod) संलग्न करें और यदि आवश्यक हो तो एक कॉलबैक निर्दिष्ट कर सकते हैं देख रहे हैं विश्वास करते हैं।

2

आप इसे इस तरह से कर सकता है:

var query = tasks.ToObservable().SelectMany(task => task.ToObservable()); 

या, वैकल्पिक रूप से, इस तरह:

var query = 
    from t in tasks.ToObservable() 
    from i in t.ToObservable() 
    select i; 
0

आरएक्स 2.0 के रूप में, वहाँ एक से थोड़ा आसान तरीका:

var query = tasks.ToObservable().Merge(); 
संबंधित मुद्दे