Rx ToObservable() 및 ToEnumerable() 메서드를 사용하지 않고 IEnumerable 컬렉션을 IObservable 하나의 으로 변환하려고합니다.IEnumerable을 IObservable로 변환하는 방법은 무엇입니까?
답변
간단한 대답 - 사용 ToObservable
. 그것이 바로 그 때문입니다.
"실제 질문에 대답"대답은 - 당신이 사용하지 않도록 할 수 Subjects
Observable.Create
를 통해 :
void Main()
{
var src = Enumerable.Range(0, 10);
var observable = Observable.Create<int>(obs =>
{
foreach(var item in src)
{
obs.OnNext(item);
}
return Disposable.Create(()=>{});
});
using(observable.Subscribe(Console.WriteLine))
{
Console.ReadLine();
}
}
출력 : 사람이 알 수없는 유형의 IEnumerable
이있는 경우
0
1
2
3
4
5
6
7
8
9
'Disposable.Create (() => {});은'Disposable.Empty'와 다른가요? – interlude
@interlude 필자는 방금 과부하를 사용하여 필요할 경우 정리 논리를 추가 할 수있었습니다. – JerKimball
, 두 가지 방법 중 하나가 "IObservable로 변환"할 수 있습니다.
오브젝트의 모든 데이터를
IObservable
을 구현하는 새 콜렉션에 복사하십시오. 이 작업이 완료되면 새 콜렉션에 대한 변경 사항 만보고됩니다. 원본에 대한 변경 사항은 적용되지 않습니다.주기적으로
IEnumerable
내용의 스냅 샷을 찍을 새 개체를 만듭니다. 각 스냅 샷을 찍은 후 이전 스냅 샷에 적용해야 할 모든 변경 사항을보고하여 새 스냅 샷과 일치하게하십시오. 이 방법을 사용하면 원래 개체에 대한 변경 사항이 관찰되지만 결국 변경 사항이 없을 때 컬렉션을 반복적으로 읽는 데 많은 시간을 낭비하지 않고시기 적절하게 업데이트 알림을 제공하기가 어렵습니다. 하나는IObservable
오히려 데이터의 복사본이 자동으로 입력하는 새로운 객체보다, 원래IEnumerable
개체에 바인딩해야 할 필요가있을 때
몇 번있다; 그러한 경우 두 번째 접근법이 필요할 수 있습니다. 그러나 종종 원래의 컬렉션이 임의의 IEnumerable
에서 사용할 수없는 기능을 지원하지 않는 한 허용되지 않는 시스템로드를 유발하지 않으면 서 적시에 업데이트를 제공 할 수있을만큼 폴링 속도를 빠르게 만들 수 없습니다. 또한 IEnumerable
유형에 대한 요구 사항을 부과하지 않으면 업데이트 될 수있는 스레딩 컨텍스트에 제한을 가할 수 있습니다.
왜 'ToObservable()'을 사용하지 않으시겠습니까? –
@DanielHilgarth 나는 또한 호기심이있다 - 그것이 To Observable()의 요점이다. – JerKimball