C# 选择接收超时? 可观测间隔(时间跨度从秒(5)) .超时(dueTime:DateTimeOffset.UtcNow, 其他:可观察。回报(-1)) .Subscribe(Console.WriteLine);

C# 选择接收超时? 可观测间隔(时间跨度从秒(5)) .超时(dueTime:DateTimeOffset.UtcNow, 其他:可观察。回报(-1)) .Subscribe(Console.WriteLine);,c#,.net,system.reactive,C#,.net,System.reactive,当超时时,上面的代码段将返回-1。但是,我需要一些可以映射序列的东西,比如select操作符 我想我需要一个 Observable.Interval(TimeSpan.FromSeconds(5)) .Timeout(dueTime: DateTimeOffset.UtcNow, other: Observable.Return<long>(-1)) .Subscribe(Console.WriteLine); .Timeout(DateTimeOffset dueTime,Fu

当超时时,上面的代码段将返回-1。但是,我需要一些可以映射序列的东西,比如select操作符

我想我需要一个

Observable.Interval(TimeSpan.FromSeconds(5))
.Timeout(dueTime: DateTimeOffset.UtcNow,
 other: Observable.Return<long>(-1))
.Subscribe(Console.WriteLine);
.Timeout(DateTimeOffset dueTime,Func Observable.Return(i*i.ToString()))
.Subscribe(Console.WriteLine);
有人能告诉我这件事吗?谢谢。

那么:

 Observable.Interval(TimeSpan.FromSeconds(5))
    .Timeout<long, string>(dueTime: DateTimeOffset.UtcNow,
     other: i=> Observable.Return<string>(i * i.ToString()))
    .Subscribe(Console.WriteLine);
您可以将DoWork实现为:

Observable.Interval(TimeSpan.FromSeconds(5))
    .SelectMany(x => DoWork().Timeout(...))
    .Subscribe(Console.WriteLine);
IObservable DoWork()
{
返回可观察的.Start(()=>Thread.Sleep(1000));
}
Observable.Interval(TimeSpan.FromSeconds(5))
    .SelectMany(x => DoWork().Timeout(...))
    .Subscribe(Console.WriteLine);
IObservable<Unit> DoWork()
{
    return Observable.Start(() => Thread.Sleep(1000));
}