Ho un processore casella di posta che riceve un numero fisso di messaggi:ordine Garanzia di messaggi inviati ad processore mailbox
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")
Questi messaggi devono essere gestiti esattamente l'ordine inviato. Durante il mio test, esso stampa esattamente quello che dovrebbe:
First message
Second message
Third message
Tuttavia, dal momento che il messaggio distacco è asincrona, suona come inviare 3 messaggi rapidamente potrebbe tradursi in articoli in corso di lavorazione in qualsiasi ordine. Non Per esempio, io non desidera ricevere i messaggi in ordine e ottenere qualcosa di simile:
Second message // <-- oh noes!
First message
Third message
sono i messaggi garantiti da ricevere ed elaborati nell'ordine inviato? O è possibile che i messaggi vengano ricevuti o elaborati fuori servizio?
Questa è davvero una bella domanda. Ho esaminato FSharp.Core.dll ma il codice è difficile da capire come C#. – ChaosPandion