ソース イベントを受け取り、 (T は任意の型) でThrottle
ある "スロットル ストリーム" を生成するファクトリ関数を受け入れるのオーバーロードがあります。IObservable<T>
イベントは、スロットル ストリームが発行されるまで抑制されます。
次の例には、0.5 秒のスロットルを生成するスロットル ファクトリを使用して、毎秒ポンピングするストリームがあります。したがって、開始時に、ソース ストリームは調整されません。
2 と入力すると、スロットルが 2 秒のスロットルに変わり、すべてのイベントが抑制されます。1 に下げると、イベントが再び表示されます。
void Main()
{
var throttleDuration = TimeSpan.FromSeconds(0.5);
Func<long, IObservable<long>> throttleFactory =
_ => Observable.Timer(throttleDuration);
var sequence = Observable.Interval(TimeSpan.FromSeconds(1))
.Throttle(throttleFactory);
var subscription = sequence.Subscribe(Console.WriteLine);
string input = null;
Console.WriteLine("Enter throttle duration in seconds or q to quit");
while(input != "q")
{
input = Console.ReadLine().Trim().ToLowerInvariant();
double duration;
if(input == "q") break;
if(!double.TryParse(input, out duration))
{
Console.WriteLine("Eh?");
continue;
}
throttleDuration = TimeSpan.FromSeconds(duration);
}
subscription.Dispose();
Console.WriteLine("Done");
}
これはイベントごとにスロットルを生成するファクトリ関数であるため、特定の入力イベントに基づいてスロットル ストリームを返す、より動的なものを作成できます。
このようなコントロールとして使用されるストリームのアイデアは、Rx API 全体で使用される非常に一般的な手法であり、理解する価値があります。同様の使用例には、 to 、in 、inのother
引数が含まれます。TakeUntil
durationSelector
GroupByUntil
bufferClosingSelector
Buffer