Экспериментировал тут и наткнулся на странность. Баг или фича?
open System
open type System.Console
type Msg = | GetCount of AsyncReplyChannel<int>
let counter = MailboxProcessor<Msg>.Start(fun mb ->
let rec loop s = async {
let! (GetCount repl) = mb.Receive()
repl.Reply s
return! loop (s + 1)
}
loop 1)
let useColor color =
let old = ForegroundColor
ForegroundColor <- color
{new IDisposable with member it.Dispose () = ForegroundColor <- old }
let repeat color =
let rec loop () = async {
let! id = counter.PostAndAsyncReply GetCount
let x = useColor color in do WriteLine $"{id}"; x.Dispose();// если заменить строку на 'use _ = useColor color in do WriteLine $"{id}"' начинает течь память
return! loop ()
}
loop ()
for e in ConsoleColor.GetValues() do
repeat e |> Async.Start