match msg with
| Cmd cmd -> cmd::commands
| Flush ->
Snake.mergeCommands commands
|> Commands
|> snakeAgent.Post
[]
let commandAgent = [] |> Mailbox.buildAgent commandAgentFn |> Agent
это то, что ты имеешь ввиду?
я вот тоже похожую штуку у себя попользовал: type private BufferedMsg<'T> = | Store of 'T | Flush of ('T -> unit) type MessageBuffer<'T> () = let buffer = MailboxProcessor.Start (fun inbox -> let rec store (queue: Queue<'T>) = async { let! msg = inbox.Receive () match msg with | Store m -> queue.Enqueue m return! store queue | Flush f -> return! flushing queue f } and flushing queue f = async { while queue.Count <> 0 do f (queue.Dequeue ()) return! pass f } and pass f = async { let! msg = inbox.Receive () match msg with | Store m -> f m return! pass f | Flush newF -> return! pass newF } store (new Queue<'T>())) member __.Store data = buffer.Post (Store data) member __.Flush receiver = buffer.Post (Flush receiver) но очень хочется найти более приличный способ нескольким мейлбоксам циклически взаимодействовать (без акки)
Обсуждают сегодня