2012-07-18 2 views
2

System.IObservable<string>System.IObservable<System.Collections.Generic.List<string>>으로 변환하려면 어떻게해야합니까?System.IObservable <string> to System.IObservable <System.Collections.Generic.List <string>>

public static IObservable<List<string>> GetUrlList(Uri url) { 
    var result = (from request in Observable.Return(GetWebRequest(url, false)) 
    from response in Observable.FromAsyncPattern<WebResponse>(
    request.BeginGetResponse, request.EndGetResponse)() 
     from item in GetUrlCollection(response).ToObservable() 
    select item); 
    return result; 
} 

여기서 항목의 유형은 "문자열 목록"입니다. 그걸 IObservable List of strings으로 변환해야합니다. 이것을 어떻게 할 수 있습니까?

답변

2

이 시도 :

public static IObservable<List<string>> GetUrlList(Uri url) 
{ 
    var result = (
     from request in Observable.Return(
      GetWebRequest(url, false)) 
     from response in Observable.FromAsyncPattern<WebResponse>(
      request.BeginGetResponse, request.EndGetResponse)() 
     from item in GetUrlCollection(response) 
      .ToObservable() 
      .ToArray() 
     select item 
      .ToList()); 
    return result; 
} 

이 모든 접근 방식 내 유일한 관심사는 GetUrlCollection(response)이 열거를 반환하는 것입니다. 관측 가능 값을 반환하려면이 코드를 작성해야합니다.

1

흠 나는 Observable이라고 생각합니다. 시작은 여기에 친구입니다. Observable Sequence에 강요하는 것처럼 보이게하는 많은 코드가 있습니다. 실제로 보이지 않는 경우입니다.

Rx는 푸시 데이터 시퀀스로 작동하도록 설계된 것입니다. 당신은리스트 인 일이 1 인 것처럼 보입니다. TPL/Task/async가 여기에 적합합니다.

Rx를 사용하고 싶다면 IEnumable과 IObservable 사이를 피하는 것이 좋습니다. 이렇게하면 불쾌한 경쟁 조건을 만들고 다음 개발자를 혼란스럽게 만들 수 있습니다.

여기 Observable에서 행복하게 동기 할 수 있습니다. 시작 대리인. 다음 사람이 이해하기가 훨씬 쉬울 것입니다 (즉, 값으로 UrlCollection을 갖는 단일 값 시퀀스).

관련 문제