Я просматривал одно из сообщений в блоге Дона Сайма Асинхронные и параллельные шаблоны проектирования в F #: Агенты .Однако следующий, казалось бы, чрезвычайно простой код не сгенерировал вывод, как ожидалось.
type Agent<'T> = MailboxProcessor<'T>
let agent =
Agent.Start(fun inbox ->
async { while true do
let! msg = inbox.Receive()
printfn "got message '%s'" msg } )
for i in 1 .. 10000 do
agent.Post (sprintf "message %d" i)
Вместо ожидаемых 10000 сообщений я получил только около 3000 сообщений с использованием Mono 2.8.1 под Ubuntu или 15 сообщений с использованием VisualF # под Windows XP.Я что-то здесь упускаю?Кстати, я попытался заменить оператор printfn на следующую опцию File, и в результате я получил те же частичные результаты.
open System.IO
type Agent<'T> = MailboxProcessor<'T>
let agent =
Agent.Start(fun inbox ->
async { while true do
let! msg = inbox.Receive()
use logger = new StreamWriter("a.log", true)
logger.WriteLine("got message '{0}'", msg.ToString())
logger.Close()
} )
for i in 1 .. 10000 do
agent.Post (sprintf "message %d" i)