是否有可能在一段时间内禁用节流阀?

时间:2019-02-26 12:26:19

标签: rx-java rx-java2

我的事件来自系统快速的事件,但是我只需要每500 ms持续一次,所以我使用tthrottle。但是,在用户输入之后,我想为1个事件禁用节流,以使其尽快进行。有没有办法禁用它或指示应强制下一个事件?

2019-02-26 11:33:44,805 - stages.py[INFO]: Applying network configuration from ds bringup=False: {'version': 2, 'ethernets': {'net1': {'match': {'macaddress': '52:54:00:ab:cd:ef'}, 'dhcp4': False, 'dhcp6': False, 'addresses': ['192.168.42.100/24', '2001:db8::100/32'], 'gateway4': '192.168.42.1', 'gateway6': '2001:db8::1', 'nameservers': {'search': ['example.com'], 'addresses': ['192.168.42.53', '1.1.1.1']}}, 'net0': {'match': {'macaddress': '52:54:00:59:e0:78'}, 'dhcp4': False, 'dhcp6': False, 'addresses': ['10.170.64.95/24'], 'routes': [{'to': '10.170.0.0/16', 'via': '10.170.64.1'}, {'to': '10.270.0.0/16', 'via': '10.170.64.1', 'metric': 100}]}}}
2019-02-26 11:33:44,806 - stages.py[ERROR]: Unable to render networking. Network config is likely broken: No available network renderers found. Searched through list: ['eni', 'sysconfig', 'netplan']

1 个答案:

答案 0 :(得分:0)

您无法关闭throttleLast的行为。您最能做的是发布序列并在两种处理模式之间切换:

source
.observeOn(Schedulers.single())
.publish(o ->
    o.throttleLast(500, TimeUnit.MILLISECONDS, Schedulers.single())
    .take(1)
    .concatWith(o.takeUntil(1, TimeUnit.SECONDS, Schedulers.single()))
    .repeat()
    .takeUntil(o.ignoreElements().toObservable())
)

因此,进行500毫秒的油门控制,这将导致一项结果,然后切换到非油门控制序列1秒钟,然后从头开始进行油门控制等操作。为了避免由于模式切换而造成的任何数据丢失,您应该使用单线程调度程序,例如single(),但这仍然不是100%无数据丢失的。最好的是敬业的独特操作员。

编辑:如果源独自终止,则需要额外的takeUntil来阻止重复。