Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 邮件到达mailboxprocessor的顺序_F#_Mailboxprocessor - Fatal编程技术网

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,说明它们是否是最后一条消息。我为收到的每条消息跨越了一个新线程,以便不阻止写入,因为我的读取是从同一代码中的阻塞集合完成的。坏主意,因为我失去了对订购的控制!