选择Rx超时?

时间:2013-06-10 02:30:57

标签: c# .net system.reactive

Observable.Interval(TimeSpan.FromSeconds(5))
.Timeout(dueTime: DateTimeOffset.UtcNow,
 other: Observable.Return<long>(-1))
.Subscribe(Console.WriteLine);

上面的代码片段会在超时时返回-1。但是,我需要一些允许我映射序列的东西,比如select运算符。

我想我需要像

这样的东西
.Timeout(DateTimeOffset dueTime, Func<IObservable<TSource>,Func<TSource, TResult> selector)

所以我做这样的事情

 Observable.Interval(TimeSpan.FromSeconds(5))
    .Timeout<long, string>(dueTime: DateTimeOffset.UtcNow,
     other: i=> Observable.Return<string>(i * i.ToString()))
    .Subscribe(Console.WriteLine);

有人可以开导我吗?感谢。

1 个答案:

答案 0 :(得分:1)

怎么样:

Observable.Interval(TimeSpan.FromSeconds(5))
    .SelectMany(x => DoWork().Timeout(...))
    .Subscribe(Console.WriteLine);

您可以将DoWork实现为:

IObservable<Unit> DoWork()
{
    return Observable.Start(() => Thread.Sleep(1000));
}