Share via


반응적 확장

Rx(Reactive Extensions)는 관찰 가능한 시퀀스 및 LINQ 스타일 쿼리 연산자를 사용하여 비동기 및 이벤트 기반 프로그램을 작성하기 위한 라이브러리입니다.

데이터 시퀀스는 파일 또는 웹 서비스의 데이터 스트림, 웹 서비스 요청, 시스템 알림 또는 사용자 입력과 같은 일련의 이벤트와 같은 다양한 형식을 사용할 수 있습니다.

반응형 확장은 이러한 모든 데이터 시퀀스를 관찰 가능한 시퀀스로 나타냅니다. 애플리케이션은 이러한 관찰 가능한 시퀀스를 구독하여 새 데이터가 도착할 때 비동기 알림을 받을 수 있습니다. Rx 라이브러리는 .NET의 데스크톱 애플리케이션 개발에 사용할 수 있습니다. Silverlight, Windows Phone 7 및 JavaScript용으로도 릴리스됩니다. 이러한 다양한 플랫폼에 대한 자세한 내용은 Rx 버전 간 차이점 항목을 참조하세요.

풀링 및 데이터 푸시

대화형 프로그래밍에서 애플리케이션은 원본을 나타내는 시퀀스에서 데이터를 끌어와 데이터 원본에 대한 자세한 정보를 적극적으로 폴링합니다. 이러한 동작은 IEnumerable<T/IEnumerator T>>의 반복기<패턴으로 표시됩니다. IEnumerable<T> 인터페이스는 이 컬렉션을 반복하기 위해 IEnumerator T>를 반환하는 단일 메서드 GetEnumerator<()를 노출합니다.  IEnumerator<T> 를 사용하면 현재 항목을 가져올 수 있으며(Current 속성을 반환하여) MoveNext 메서드를 호출하여 반복할 항목이 더 있는지 여부를 확인할 수 있습니다. 

애플리케이션은 데이터 검색 프로세스에서 활성화되어 있습니다. GetEnumerator를 호출하여 열거자를 가져오는 것 외에도 자체 편의를 위해 MoveNext를 호출하여 검색 속도를 제어합니다. 이 열거형 패턴은 동기적입니다. 즉, 데이터 원본을 폴링하는 동안 애플리케이션이 차단될 수 있습니다. 이러한 당기는 패턴은 라이브러리를 방문하고 책을 확인하는 것과 유사합니다. 당신이 책을 완료 한 후, 당신은 다른 하나를 검사 위해 또 다른 방문을 지불합니다.

반면, 반응형 프로그래밍에서 애플리케이션은 데이터 스트림(Rx에서 관찰 가능한 시퀀스라고 함)을 구독하여 추가 정보를 제공하며, 모든 업데이트는 원본에서 전달됩니다. 애플리케이션은 데이터 검색 프로세스에서 수동적입니다. 관찰 가능한 원본을 구독하는 것 외에도 원본을 적극적으로 폴링하지 않고 푸시되는 데이터에만 반응합니다. 스트림에 제공할 데이터가 더 이상 없거나, 이 데이터가 더 이상 표시되지 않으면 원본이 구독자에게 알림을 보냅니다. 이러한 방식으로 원본이 업데이트될 때까지 기다리면 애플리케이션이 차단되지 않습니다.

이는 반응형 확장에서 사용하는 푸시 패턴입니다. 그것은 당신이 특정 장르에 관심을 등록하는 책 클럽에 가입하는 것과 유사하며, 관심과 일치하는 책은 출판될 때 자동으로 사용자에게 전송됩니다. 원하는 것을 얻기 위해 줄을 설 필요가 없습니다. 푸시 패턴을 사용하는 것은 많은 시나리오, 특히 애플리케이션이 일부 이벤트를 기다리는 동안 UI 스레드를 차단할 수 없는 UI가 많은 환경에서 유용합니다. 이는 자체 비동기 요구 사항 집합이 있는 Silverlight와 같은 프로그래밍 환경에서도 필수적입니다. 요약하면 Rx를 사용하여 애플리케이션의 응답성을 높일 수 있습니다.

Rx에서 구현된 푸시 모델은 IObservable T/IObserver<T>>의 관찰 가능한<패턴으로 표시됩니다. IObservable<T> 인터페이스는 친숙한 IEnumerable<T> 인터페이스의 이중 인터페이스입니다. 데이터 시퀀스를 추상화하고 데이터 시퀀스에 관심이 있는 IObserver<T> 구현 목록을 유지합니다. IObservable은 모든 관찰자에게 상태 변경 내용을 자동으로 알립니다. 구독을 통해 관심을 등록하려면 IObserver를 사용하고 IDisposable을 반환하는 IObservable의 Subscribe 메서드를 사용합니다. 이렇게 하면 구독을 추적하고 삭제할 수 있습니다. 또한 관찰 가능한 시퀀스에 대한 Rx의 LINQ 구현을 통해 개발자는 .NET 이벤트, APM 기반("IAsyncResult") 계산, 작업<T> 기반 계산, Windows 7 센서 및 위치 API, SQL StreamInsight 임시 이벤트 스트림, F# 일류 이벤트 및 비동기 워크플로와 같은 푸시 기반 시퀀스를 통해 복잡한 이벤트 처리 쿼리를 작성할 수 있습니다. IObservable T/IObserver<T> 인터페이스에 대한 자세한 내용은 Rx의 주요 인터페이스 탐색을 참조하세요.>< Rx에서 다양한 기능을 사용하는 방법에 대한 자습서는 Rx 사용을 참조하세요.