How to organize sequence of data processors with .net RX

喜欢而已 提交于 2020-01-11 13:21:04

问题


What is the best way to organize sequence of data processors with .net RX?
- a. Call methods on observable like observable.Do(log).Select(transformation).Do(work).Aggregate(someState)...
- b. Implement custom observers, if so - how to chain them
- c. Other option.. And also what is the best option to handle possible exceptions in observable itself (see my concerns above) and to handle exceptions inside Do, Select, etc (as I know the best practice is that Subscribers shouldn't throw).

Also I need sometimes to allow exceptions being returned as some elements of observable sequence without sequence being stopped (see this question Handling Exceptions in Reactive Extensions without stopping sequence)


回答1:


This seems like you need a workflow instead of Rx. It seems based on your other questions* you are trying to take what looks very well suited to a ProducerConsumer queuing workflow scenario, and forcing it into Rx.

It looks like you

  • want to Read from a Queue and block until a value is received, then resubscribe. Just use Queuing features of BlockingCollection. As values arrive they can be pushed into the collection from any thread.
  • dont want to actually have a sequence of values, but a workflow that can fail on any given value, divert that and then process the next value. Just use a queue. Process each value and put the results into the next appropriate queue (Failure/Success) ->See Enterprise Integration Patterns, specifically Invalid Message Channel and Dead Letter channel.
  • potentially process these values in parallel. See BlockingCollection.GetConsumingEnumerable or the Disruptor for a high performance implementation. With these tools you can have many produces and consumers. Sure you can do this with Rx, but it is just polling and tying up a thread doing so. I think it is better to be explicit about this kind of thing

I think your usage of Rx should pay for itself and you shouldn't find yourself fighting it (like any other technology or framework).

*other questions like Handling Exceptions in Reactive Extensions without stopping sequence and How to serialize Observables to the cloud and back



来源:https://stackoverflow.com/questions/13310865/how-to-organize-sequence-of-data-processors-with-net-rx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!