我有以下两个观测
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只执行时“最后一次修改”头是大于先前请求的文件有任何想法?
首先。选择(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