system.reactive 节流
示例
假设您需要实现一个自动搜索框,但是搜索操作的成本较高,例如发送Web请求或建立数据库。您可能想限制搜索的数量。
例如,用户在搜索框中输入“C#ReactiveExtensions”:
IObservable<string> TypingSearchText()
{
return Observable.Create<string>(o =>
{
const string SearchText = "C# Reactive Extensions";
var builder = new StringBuilder();
foreach (var c in SearchText)
{
builder.Append(c);
//通知搜索文本已更改
o.OnNext(builder.ToString());
//在每个字符之间停顿以模拟实际打字
Thread.Sleep(125);
//花了一些时间思考下一个要输入的单词
if (c == ' ')
Thread.Sleep(1000);
}
o.OnCompleted();
return () => { /* nothing to dispose here */ };
});
}现在,我们不想在用户每次按键时都执行搜索。取而代之的是,只要用户停止输入超过半秒,它就会完成:
TypingSearchText()
//打印更改
.Do(x => Console.WriteLine("Typing: " + x))
//忽略彼此之间500毫秒内发生的更改
.Throttle(TimeSpan.FromMilliseconds(500))
//一些昂贵的操作
.Subscribe(x => Console.WriteLine("Searching: " + x));输出:
Typing: C Typing: C# Typing: C# Searching: C# Typing: C# R Typing: C# Re ... Typing: C# Reactive Typing: C# Reactive Searching: C# Reactive Typing: C# Reactive E Typing: C# Reactive Ex ... Typing: C# Reactive Extension Typing: C# Reactive Extensions Searching: C# Reactive Extensions
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下