Извлекать XDocument только при изменении с помощью Rx + WebRequest + XDocument.Load - PullRequest
1 голос
/ 06 февраля 2012

у меня есть следующие две наблюдаемыеидеи?

1 Ответ

1 голос
/ 06 февраля 2012

Во-первых .Select (x => x) - запрет, поэтому вы можете удалить его.

Я бы немного изменил код.Сначала давайте разбить его на составные части:

1) Таймер.Каждый второй опрос сервера.

var poll = Observable.Interval (TimeSpan.FromSeconds (1));

2) Вызов для получения заголовка

var lastModified =Observable.FromAsyncPattern (req.BeginGetResponse, req.EndGetResponse) .Select (x => x.Headers ["Last-Modified"]);

3) Выбор для получения документа

.Select (_ => XDocument.Load ("http://test.com/data.xml"));

Мы должны быть в состоянии составить это красиво:

var lastModified = from interval in Observable.Interval(TimeSpan.FromSeconds(1))
           from response in Observable.FromAsyncPattern(req.BeginGetResponse, req.EndGetResponse)
           select response.Headers["Last-Modified"];

var data = lastModified.DistinctUntilChanged().Select(_ => XDocument.Load("http://test.com/data.xml"));

data.Subscribe(dataXml=> 
   {
       Console.WriteLine("Data has changed!");
       Console.WriteLine(datXml);
   });

Cavet Я просто набрал это прямо в браузере. Я хотел быудивительно, если он скомпилируется.

...