使用改性仅当检索的XDocument RX +的WebRequest + XDocument.Loa

2019-09-28 19:12发布

我有以下两个观测

System.Net.WebRequest req = System.Net.HttpWebRequest.Create("http://test.com/data.xml"); req.Method = "HEAD";

VAR = OB Observable.FromAsyncPattern(req.BeginGetResponse,req.EndGetResponse);

。OB()选择(X => X)。选择(X => x.Headers [ “上次修改”])DistinctUntilChanged(X => X)。

可观察到的.Interval(TimeSpan.FromSeconds(1.0))。选择(_ => XDocument.Load( “http://test.com/data.xml”));

我想它是观察到的的XDocument只执行时“最后一次修改”头是大于先前请求的文件有任何想法?

Answer 1:

首先。选择(X => x)是一个无操作这样可以去除这一点。

我想改变的代码了一点点。 首先让把它分解成它的组成部分:

1)定时器。 每一秒轮询服务器。

VAR =轮询Observable.Interval(TimeSpan.FromSeconds(1));

2)调用来获取头

VAR的LastModified = Observable.FromAsyncPattern(req.BeginGetResponse,req.EndGetResponse)。选择(X => x.Headers [ “上次修改”]);

3)选择来获取文档

。选择(_ => 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我刚才输入的是直接在浏览器中。 如果它编译我将是惊人的。



文章来源: Retrieve XDocument only when modified using Rx + WebRequest + XDocument.Load