2015-08-28 32 views
5

Öğeyi hangi iş parçacığı üzerinde işlemeye karar vermek için, IObservable içinden geçen her öğenin değerini denetleyebilen özel bir zamanlayıcı oluşturmak mümkün mü?Reaktif Uzantılar (RX) Özel Zamanlayıcı C#

Aynı tuşa sahip öğeleri sırayla ancak farklı anahtarları paralel olarak işlemek için bir ihtiyacım var. Her bir değeri bir iş parçacığına tahsis etmek için RX'in daha önce gözlemlenebilir olandan ayrılmaktan ziyade programlamayı yapması mantıklı olacaktır.

cevap

7

GroupBy'u denediniz mi ObserveOn? gibi

şey: Bu, anahtar ile akışı bölme her anahtar için yeni bir başlık açıp bu anahtarın her öğe için process() çalışacak

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

.

+1

Bu çok iyi. Sadece LINQPad'de bir test yaptım ve güzel çalışıyor. Bunu bazen kullanmalıyım. – Enigmativity

+0

zarif ama binlerce anahtar varsa ne olur? İdeal olarak, bir zamanlayıcı iş parçacığı iş parçacığı üzerinde görevleri kullanarak aynı anahtar ile öğeleri işleyebilir? – benthemos

+1

Elbette. Platformunuza bağlı olarak threadpool'u veya Görevleri kullanan 'Scheduler.Default' kullanmak isteyebilirsiniz. – Brandon