当前位置: 首页 > 编程笔记 >

system.reactive 节流

徐嘉勋
2023-03-14
本文向大家介绍system.reactive 节流,包括了system.reactive 节流的使用技巧和注意事项,需要的朋友参考一下

示例

假设您需要实现一个自动搜索框,但是搜索操作的成本较高,例如发送Web请求或建立数据库。您可能想限制搜索的数量。

例如,用户在搜索框中输入“ C#Reactive Extensions”:

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
           

 类似资料:
  • 本文向大家介绍system.reactive 忽略重复值,包括了system.reactive 忽略重复值的使用技巧和注意事项,需要的朋友参考一下 示例 有两个用于过滤重复项的运算符: 您还可以传递谓词:            

  • 本文向大家介绍system.reactive 过滤可观察值,包括了system.reactive 过滤可观察值的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 本文向大家介绍system.reactive 共享一个订阅(发布),包括了system.reactive 共享一个订阅(发布)的使用技巧和注意事项,需要的朋友参考一下 示例 给定一个IObservable<Offer>的offers从商家购买或以固定价格出售某些类型的项目,我们可以按照如下匹配对买家和卖家的: 问题在于,每个订阅trades将订阅offers两次。我们可以sellers和buyer

  • 本文向大家介绍system.reactive 订阅/取消订阅可观察对象(IDisposable),包括了system.reactive 订阅/取消订阅可观察对象(IDisposable)的使用技巧和注意事项,需要的朋友参考一下 示例 订阅返回IDisposable: 当您准备取消订阅时,只需处置订阅即可:            

  • 本文向大家介绍system.reactive 将异步方法包装为可观察的,包括了system.reactive 将异步方法包装为可观察的的使用技巧和注意事项,需要的朋友参考一下 示例 给定这样的async方法: IObservable<string>像这样包装它:            

  • 本文向大家介绍system.reactive 为可观察值中的每个值选择一个新值,包括了system.reactive 为可观察值中的每个值选择一个新值的使用技巧和注意事项,需要的朋友参考一下 示例