이미 내가 비슷한 질문이 반응성 (Database polling with Reactive Extensions)Reactive Extensions를 사용하여 주를 어떻게 폴링합니까?
를 사용하여 데이터베이스 폴링에 좋은 질문이 있습니다,하지만 트위스트와 함께 : 나는 다음 요청으로 이전 결과에서 값을 공급해야합니다. 기본적으로,이 폴링 싶습니다 :
interface ResultSet<T>
{
int? CurrentAsOfHandle {get;}
IList<T> Results {get;}
}
Task<ResultSet<T>> GetNewResultsAsync<T>(int? previousRequestHandle);
을 생각이 이전 요청
- 매 순간 내가
GetNewResultsAsync
- 내가 전화하고 싶은 이후의 모든 새 항목을 반환한다는 것입니다 이전 호출에서
CurrentAsOf
을 인수로 사용하여previousRequest
매개 변수 - 에 다음 호출을으로 전달하려고합니다. 이 버전은 기다리는 동안
messageResultSet
수집 할 수 있는지return Observable.Create<IMessage>(async (observer, cancellationToken) => { int? currentVersion = null; while (!cancellationToken.IsCancellationRequested) { MessageResultSet messageResultSet = await ReadLatestMessagesAsync(currentVersion); currentVersion = messageResultSet.CurrentVersionHandle; foreach (IMessage resultMessage in messageResultSet.Messages) observer.OnNext(resultMessage); await Task.Delay(TimeSpan.FromMinutes(1), cancellationToken); } });
이 또한주의 :실제로 기본적으로 이전
후 1 분 발생해야,보다 더 나은 방법이있다 다음 반복 (예를 들어, Scan
을 사용하여 이전 결과 집합 개체를 다음 반복에 전달할 수 있다고 생각한 경우)
또 다른 사소한 단점은 전체 결과 집합은 다음 반복을 통해 살아있다. 문제의 버전은 '버전'만 필요하기 때문에 '메시지'부분을 가비지 수집 할 수 있습니다. –