【发布时间】:2017-09-27 03:07:08
【问题描述】:
我正在研究具有多个状态的 F# 代理,即使用“let rec/and”关键字组合(根据 Expert F# 3.0 的“消息处理和状态机”)来提供多个异步块。到目前为止,我能找到的唯一例子是讨论过的“节流代理”here(也是 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 值)将成功更改速率而不会中断数据流值了。任何关于“暂停”的建议仍将不胜感激。
【问题讨论】:
-
从tryjoinads.org/docs/use/agents.html获得了一些“暂停”和多状态“让记录/和”的想法
标签: asynchronous f# agent mailboxprocessor