N秒間イベントを生成し続ける正しいRx拡張メソッド(.NET内)は何ですか?
「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);