F# 邮件到达mailboxprocessor的顺序
对于发送给邮箱处理器的邮件的到达顺序,是否有/如何获得保证 也就是说,如果我这样做的话F# 邮件到达mailboxprocessor的顺序,f#,mailboxprocessor,F#,Mailboxprocessor,对于发送给邮箱处理器的邮件的到达顺序,是否有/如何获得保证 也就是说,如果我这样做的话 agent.post(msg1) agent.post(msg2) 如何确保在代理的处理循环中,消息将按顺序接收?它们是。Post的实现正如您所猜测的那样,它只是将一个项目添加到队列中(在当前线程的锁下),并发布工作以通知任何等待的代理唤醒并处理它。因此,如果您在同一个线程上连续两次调用Post,消息将按顺序进入队列。您还可以使用inbox.Scan(函数->None//return a Option)来查
agent.post(msg1)
agent.post(msg2)
如何确保在代理的处理循环中,消息将按顺序接收?它们是。
Post
的实现正如您所猜测的那样,它只是将一个项目添加到队列中(在当前线程的锁下),并发布工作以通知任何等待的代理唤醒并处理它。因此,如果您在同一个线程上连续两次调用Post
,消息将按顺序进入队列。您还可以使用inbox.Scan(函数->None//return a Option)
来查找消息(如果您有某种检测顺序的方法)。当然,这是以性能为代价的,所以最好不要插队。我需要进一步调查。因为我在我的并发队列中添加了无序元素,在接收数据时,我将数据存储在其中。我为最后一条消息添加了一个无问题,在发布非最后一条消息后立即发出结束信号。我只是在另一条消息中添加了一个bool,说明它们是否是最后一条消息。我为收到的每条消息跨越了一个新线程,以便不阻止写入,因为我的读取是从同一代码中的阻塞集合完成的。坏主意,因为我失去了对订购的控制!