>  기사  >  백엔드 개발  >  C#Rx의 주요 인터페이스에 대한 심층적인 이해

C#Rx의 주요 인터페이스에 대한 심층적인 이해

黄舟
黄舟원래의
2017-03-16 11:59:322404검색

이 글에서는 C# Rx의 주요 인터페이스와 관련 정보를 중심으로 소개하고 있으니, 필요한 친구들은

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 인터페이스로 표현됩니다. 그런 다음 항목은 구독 중인 관찰 가능 시퀀스에서 관찰자에게 전달됩니다.

관찰 가능한 컬렉션에서 알림을 받으려면 IObservable의 Subscribe 메서드를 사용하여 IObserver 객체 에 전달합니다. 이 관찰자에 대한 대가로 Subscribe 메서드는 구독에 대한 핸들로 IDisposable 개체를 반환합니다. 이를 통해 완료 시 구독을 정리할 수 있습니다. 이 개체에 대해 Dispose를 호출하면 관찰자가 소스에서 분리되어 알림이 더 이상 전달되지 않습니다. 추론할 수 있듯이 Rx에서는 .NET 이벤트 모델에서처럼 명시적으로 이벤트 구독을 취소할 필요가 없습니다.

관찰자는 인터페이스 메소드에 반영되는 세 가지 게시 이벤트를 지원합니다. OnNext는 관찰 가능한 데이터 소스에 사용 가능한 데이터가 있는 경우 0회 이상 호출할 수 있습니다. 예를 들어 마우스 움직임 이벤트에 대한 관찰 가능한 데이터 소스는 마우스가 움직일 때마다 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는 IObserver 인터페이스를 직접 구현하지 않아도 되도록 Subscribe 확장 메서드도 제공합니다. 관찰 가능 시퀀스의 게시된 각 이벤트(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의 주요 인터페이스에 대한 심층적인 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.