毎秒5秒間何かを試し、すべてがfalseの場合はfalseを返し、最初にtrueの場合はtrueを返したいと思います。必須では、次のようになります。
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が返された場合、早期に戻ることはありません。