我正在研究具有多种状态的 F# 代理,即使用“let rec/and”关键字组合(根据 Expert F# 3.0 的“消息处理和状态机”)来提供多个异步块。到目前为止,我能找到的唯一示例是此处讨论的“节流代理” (也是 Fssnip.net)。是否有任何其他资源可用于学习此模式?
编辑:我的特定应用程序是具有两种状态的代理,
| StartFeed rateMultiplier replychannel ->
- replychannel out data values at a delay (provided with each value)
multiplied by rateMultiplier
- loop by using
thisAgent.Post(StartFeed rateMultiplier replychannel)
| Pause ->
我想提供一些方法来传递进给率乘数值,该值通过在“馈送”异步状态下传入的乘数增加/减少延迟,而不会中断值的馈送。我想这个问题可以归结为“你如何保持异步状态块主动循环,同时仍然知道新消息?” 几乎就像跳过收件箱一样。接收异步等待,除非确实有消息进来?收件箱.scan?
编辑 2:鉴于 MailboxProcessor 的消息队列方面,我可以看到代理接收并放入队列的外部消息(具有不同的 rateMultiplier 值)将成功更改速率,而不会中断数据值的流出。任何关于“暂停”的建议仍将不胜感激。