Ich habe einen Mailbox-Prozessor, der eine feste Anzahl von Nachrichten empfängt:Garantie Reihenfolge der Nachrichten auf die Mailbox-Prozessor geschrieben
let consumeThreeMessages = MailboxProcessor.Start(fun inbox ->
async {
let! msg1 = inbox.Receive()
printfn "msg1: %s" msg1
let! msg2 = inbox.Receive()
printfn "msg2: %s" msg2
let! msg3 = inbox.Receive()
printfn "msg3: %s" msg3
}
)
consumeThreeMessages.Post("First message")
consumeThreeMessages.Post("Second message")
consumeThreeMessages.Post("Third message")
Diese Nachrichten in genau der Reihenfolge gesendet behandelt werden sollte. Während meiner Tests, druckt er genau, was es sein sollte:
First message
Second message
Third message
Da jedoch Nachricht Posting asynchron ist, klingt es wie Posting-3-Nachrichten schnell führen könnten in Einzelteile in beliebiger Reihenfolge verarbeitet werden. Zum Beispiel Ich will nicht Nachrichten aus, um erhalten und so etwas wie dieses:
Second message // <-- oh noes!
First message
Third message
garantiert Nachrichten in der Reihenfolge gesendet, empfangen und verarbeitet werden? Oder ist es möglich, dass Nachrichten außerhalb der Reihenfolge empfangen oder verarbeitet werden?
Das ist eine wirklich gute Frage. Ich habe FSharp.Core.dll untersucht, aber der Code ist als C# schwer zu verstehen. – ChaosPandion