Firstly .Select(x=>x) is a no-op so you can remove that.
私は少しコードを変更するだろう。最初に、それを構成部分に分割することができます。
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私はちょうどそれをブラウザに直接入力しました。私はそれがコンパイルされたら驚くだろう。