다음
:
// The initial Uri
Uri initialUri = ...;
// A function to return the JSON string from a given Uri
Func<Uri, string> getJason = ...;
// Turn the JSON into the next set of Uris to fetch
Func<string, IEnumerable<Uri>> getUris = ...;
그런 다음 Rx를 사용하여 이러한 함수를 다음과 같이 작업 풀을 사용하여 관찰 가능 객체를 반환하는 함수로 바꿉니다.
Func<Uri, IObservable<string>> getJasonObsFunc = u =>
Observable
.FromAsyncPattern<Uri, string>(
getJason.BeginInvoke,
getJason.EndInvoke)
.Invoke(u)
.ObserveOn(Scheduler.TaskPool);
Func<string, IObservable<Uri>> getUrisObsFunc = j =>
Observable
.FromAsyncPattern<string, IEnumerable<Uri>>(
getUris.BeginInvoke,
getUris.EndInvoke)
.Invoke(j)
.ObserveOn(Scheduler.TaskPool)
.SelectMany(xs => xs.ToObservable());
콜백을 사용하면 Uri/JSON 쌍. 이런 식으로 뭔가 :
var subscription = getAllUris(initialUri).Subscribe();
:
Func<Uri, IObservable<Uri>> getAllUris = null;
getAllUris = u =>
Observable
.Return<Uri>(u)
.Merge(
from j in getJasonObsFunc(u).Do(k => callback(u, k))
from u1 in getUrisObsFunc(j)
from u2 in getAllUris(u1)
select u2);
그런 다음 당신이 다음 줄을 사용하여이 선 (善)을 모두 호출
: 여기
Action<Uri, string> callback = (u, j) =>
Console.WriteLine(String.Format("{0} => {1}", u, j));
재귀 각 JSON 문자열을 가져옵니다 재귀 LINQ 쿼리입니다 쿼리 실행을 취소하려면 다음을 호출하십시오.
subscription.Dispose();
Rx가 모든 작업을 처리하고 모두 취소합니다.
이 정보가 도움이되기를 바랍니다. 여기
는 수신에 대한 링크입니다 :