我想在五秒钟内每秒尝试一次,如果它们都是假的,则返回假,并在第一次为真时返回真。当务之急,它看起来像这样:
bool TryFiveTimes()
{
for (int i = 0; i < 5; i++)
{
if (Fn())
return true;
System.Threading.Thread.Sleep(1000);
}
return false;
}
我想使用 Rx 来做到这一点,但想不出一个简洁的方法。我目前的尝试是:
bool TryFiveTimes()
{
return Observable.Interval(TimeSpan.FromSeconds(1))
.Take(5)
.Select(_ => Fn())
.Scan(false, (curr, prev) => curr || prev)
.Last();
}
Fn()
这将给出正确的结果,但如果在结束前返回 true ,则不会提前返回。