什么是正确的 Rx 扩展方法(在 .NET 中)以持续生成事件 N 秒?
通过“继续生成事件 N 秒”,我的意思是它将继续在循环中生成事件,从 DateTime.Now 到 DateTime.Now + TimeSpan.FromSeconds(N)
我正在研究遗传算法,它将产生许多假设并将最成功的假设传播给下一代。需要以某种优雅的方式约束这个家伙。
后来补充:
我实际上已经意识到我需要做拉而不是推,并想出了这样的事情:
public static class IEnumerableExtensions
{
public static IEnumerable<T> Pull<T>(this IEnumerable<T> enumerable, int? times = null)
{
if (times == null)
return enumerable.ToArray();
else
return enumerable.Take(times.Value).ToArray();
}
public static IEnumerable<T> Pull<T>(this IEnumerable<T> enumerable, TimeSpan timeout, int? times = null)
{
var start = DateTime.Now;
if (times != null) enumerable = enumerable.Take(times.Value);
using (var iterator = enumerable.GetEnumerator())
{
while (DateTime.Now < start + timeout && iterator.MoveNext())
yield return iterator.Current;
}
}
}
用法是:
var results = lazySource.SelectMany(item =>
{
//processing goes here
}).Pull(timeout: TimeSpan.FromSeconds(5), times: numberOfIterations);