다음을 통해 공유


관찰 가능한 공급자 사용

IQbservable 인터페이스를 구현하고 Qbservable 형식에서 제공하는 팩터리 확장 메서드를 사용하여 사용자 지정 LINQ 공급자를 작성하여 모든 유형의 외부 데이터를 쿼리하여 이러한 데이터를 구독할 수 있는 시퀀스로 처리할 수 있습니다. 예를 들어 Rx MSDN 개발자 센터의LINQ to WQL 샘플에서는 WQL을 사용하여 WMI 이벤트를 쿼리하기 위한 간단한 공급자를 빌드하는 방법을 보여 줍니다. Qbservable 형식에서 제공하는 팩터리 LINQ 연산자를 사용하여 WMI 이벤트 및 쿼리 시퀀스를 추상화하고 필터링하고 작성할 수 있습니다. 이 시퀀스를 구독하면 LINQ 쿼리 식이 대상 언어(이 경우 WQL)로 변환됩니다. 

IQbservable 인터페이스를 사용하여 외부 데이터 쿼리

데이터를 쿼리하려는 멘션 먼저 쿼리하려는 항목에 대해 걱정합니다. 끌어온 기반 IEnumerable 컬렉션 또는 푸시 기반 비동기 관찰 가능한 시퀀스일 수 있습니다 . 또한 쿼리를 실행하려는 위치(컨텍스트 아래)도 알고 싶습니다. 관찰 가능한 시퀀스의 경우 IScheduler 인터페이스 및 다양한 Scheduler 구현 형식에 의해 처리됩니다. 마지막으로 쿼리를 수행하는 방법을 알고 싶습니다. 쿼리의 각 연산자가 선형 방식으로 평가되는 쿼리(IL(.NET 중간 언어) 코드로 컴파일됨)의 축자(람다 식)를 나타낼 수 있습니다. 관찰 가능 형식의 팩터리 연산자 메서드에 대한 경우입니다. 또는 표현된 알고리즘(예: 항목이 값보다 큰지 예측 등)을 가져오기 위해 트래버스할 수 있는 식 트리를 사용하여 쿼리를 표시한 다음, SQL 데이터베이스를 쿼리하기 위한 T-SQL 쿼리 문, 특정 웹 서비스 URI에 대한 특정 HTTP 요청과 같은 일부 도메인별 코드로 알고리즘을 변환할 수 있습니다. PowerShell 명령, 클라우드 알림 서비스용 DSQL 등 Qbservable 형식의 팩터리 연산자 메서드에 대한 경우입니다. 변환된 도메인별 코드는 원격 대상 시스템에서 실행하거나 식 트리 표현을 사용하여 로컬 쿼리 최적화를 수행할 수 있습니다.

IObservable/IObserver가 IEnumerable/IEnumerator의 이중인 것처럼 IQbservableIQueryable 의 이중이며 IObservable 쿼리의 식 트리 표현을 제공합니다. AsQbservableAsObservable 메서드를 사용하여 IQbservable 형식과 IObservable 형식 간에 변경할 수 있습니다. AsQbservable을 호출하면 원래 IObservable instance 호출하는 단일 노드로 구성된 식 트리가 생성됩니다. 이 관계는 IQbservable 시퀀스에서 시작하여 전체 IQbservable 쿼리를 정의해야 하며 기존 IQbservable 쿼리에서 AsQbservable을 호출하는 것만으로는 얻을 수 없는 이유를 이해하는 데 중요 합니다. 다음 예제에서 AsQbservable에 대한 호출은 데이터 원본에 IQbservable AsQbservable을 적용하여 쿼리를 빌드할 때만 전체 쿼리 트리를 생성합니다.

var source = Observable.Interval(TimeSpan.FromSeconds(1));
var q = source.AsQbservable();
Console.WriteLine(q.ToString());
var sub = q.Subscribe(Console.WriteLine);
Console.ReadKey();

IQbservable 인터페이스는 쿼리 공급자가 구현하기 위한 것입니다. IQbservable T>도 구현하는 공급자에 의해서만 구현되어야 합니다<. 공급자가 IQbservable<T>도 구현하지 않으면 공급자의 데이터 원본에서 표준 쿼리 연산자를 사용할 수 없습니다. IQbservable 인터페이스는 IObservable 인터페이스를 상속하므로 쿼리를 나타내는 경우 해당 쿼리의 결과를 구독할 수 있습니다. 구독 및 게시를 사용하면 Qbservable 개체와 연결된 식 트리가 실행됩니다. "식 트리 실행"의 정의는 쿼리 공급자와 관련이 있습니다. 예를 들어 식 트리를 기본 데이터 원본에 대한 적절한 쿼리 언어로 변환하는 작업이 포함될 수 있습니다. Expression 속성은 IQbservable instance 연결된 식 트리를 캡슐화하는 반면 공급자는 데이터 원본과 연결된 쿼리 공급자를 캡슐화합니다.

Qbservable 클래스에 선언된 메서드 집합은 IQbservable을 구현하는 데이터 원본을 쿼리하기 위한 표준 쿼리 연산자의 구현을 제공합니다. 표준 쿼리 연산자는 LINQ 패턴을 따르고 모든 의 데이터에 대한 순회, 필터 및 프로젝션 작업을 표현할 수 있는 범용 메서드입니다. NET 기반 프로그래밍 언어입니다. 이 클래스의 대부분의 메서드는 IQbservable 형식을 확장하는 확장 메서드로 정의됩니다. 즉, IQbservable을 구현하는 모든 개체에서 instance 메서드처럼 호출할 수 있습니다. IQbservable을 확장하는 이러한 메서드는 쿼리를 직접 수행하지 않습니다. 대신, 해당 기능은 누적 쿼리를 나타내는 식 트리인 Expression 개체를 빌드하는 것입니다. 그런 다음 메서드는 새 식 트리를 CreateQuery 메서드에 전달합니다. 대상 데이터에 대한 실제 쿼리 실행은 IQbservable을 구현하는 클래스에 의해 수행됩니다.

참고 항목

참조

IQbservable
Qbservable

기타 리소스

Rx MSDN 개발자 센터