C# Rx的重要接口深切明白
IObservable / IObserver 接口在.NET Framework 4.0基类库中可用,而且它们包含在能够安装在.NET 3.5,Silverlight 3和4以及JavaScript中的包中。
IObservable/IObserver
Rx将异步和基于事宜的数据源公然为基于推送的可视察序列,由.NET Framework 4.0中的新IObservable 接口笼统。 这个IObservable 接口是用于基于拉的,可罗列鸠合的熟习的IEnumerable 接口的两重。 它示意能够视察到的数据源,这意味着它能够向任何有兴致的人发送数据。 它保护一个代表这类感兴致的监听器的依靠IObserver 完成的列表,而且自动地关照它们任何状况变化。
IObservable 接口的完成能够被视为范例T的元素的鸠合。因而,IObservable 能够被视为整数的鸠合,个中整数将被推送到定阅的视察者
如“什么是Rx”中所述,推送模子的另一半由IObserver 接口示意,它示意经由过程定阅注册兴致的视察者。 随后将项目从其定阅的可视察序列递送给视察者。
为了从observable鸠合吸收关照,您运用IObservable的Subscribe要领为其通报IObserver 对象。 作为对此视察者的报答,Subscribe要领返回一个IDisposable对象,作为定阅的句柄。 这许可您在完成后清算定阅。 在此对象上挪用Dispose将视察者从源星散,以便不再通报关照。 正如你能够揣摸,在Rx中,不须要像.NET事宜模子中那样显式作废定阅事宜。
视察者支撑三个宣布事宜,由接口的要领反应。 当可视察的数据源具有可用的数据时,OnNext能够被挪用零次或更屡次。 比方,用于鼠标挪动事宜的可视察数据源能够在每次鼠标挪动时发出一个Point对象。 其他两种要领用于指导完成或毛病。
下面列出了IObservable / IObserver 接口。
public interface IObservable<out T> { IDisposable Subscribe(IObserver<T> observer); } public interface IObserver<in T> { void OnCompleted();// Notifies the observer that the source has finished sending messages. void OnError(Exception error); // Notifies the observer about any exception or error. void OnNext(T value); // Pushes the next data value from the source to the observer. }
Rx还供应了Subscribe扩大要领,以便您能够本身防止完成IObserver 接口。 关于可视察序列的每一个宣布事宜(OnNext,OnError,OnCompleted),能够指定将挪用的托付,以下面的示例所示。 假如不为事宜指定操纵,则将发作默许行动。
IObservable<int> source = Observable.Range(1, 5); //creates an observable sequence of 5 integers, starting from 1 IDisposable subscription = source.Subscribe( x => Console.WriteLine("OnNext: {0}", x), //prints out the value being pushed ex => Console.WriteLine("OnError: {0}", ex.Message), () => Console.WriteLine("OnCompleted"));
您能够将可视察序列(比方鼠标悬停事宜的序列)看做是一般鸠合。 因而,您能够在鸠合上编写LINQ查询以实行过滤,分组,合成等操纵。为了使可视察序列更有效,Rx顺序集供应了很多工场LINQ运算符,因而您不须要本身完成任何这些 。 这将在运用LINQ运算符的查询可视察序列主题。
正告:
您不须要本身完成IObservable / IObserver 接口。 Rx为您供应这些接口的内部完成,并经由过程Observable和Observer范例供应的种种扩大要领暴露它们。 有关细致信息,请参阅创建和查询可视察序列主题
以上就是深切明白C#Rx的重要接口的细致内容,更多请关注ki4网别的相干文章!