Я не знаю, как изменить существующий интервал выборки, но то, что вы могли бы сделать, - это сэмплирование на самой высокой частоте, которая вам нужна, а затем фильтрация с помощью предложения Where
использует переменную, которую вы можете изменить.
Например:
static IObservable<T> SampleEvery<T>(this IObservable<T> source,
Func<int> multipleProvider)
{
int counter = 0;
Func<T, bool> predicate = ignored => {
counter++;
if (counter >= multipleProvider())
{
counter = 0;
}
return counter == 0;
};
return source.Where(predicate);
}
Тогда вы бы назвали это так:
// Keep this somewhere you can change it
int multiple = 1;
eventAsObservable.Sample(TimeSpan.FromSeconds(1))
.SampleEvery(() => multiple)
.Timestamp()
.Subscribe(x => Console.WriteLine("testing:" +
x.Value.EventArgs.str));
Теперь изменение значения multiple
изменит эффективную частоту дискретизации.
Это довольно уродливый хак, но я думаю, что это должно сработать.