我正在使用 Tomas 的 BlockingQueueAgent 并创建了一个 F# 控制台程序。
https://github.com/tpetricek/FSharp.AsyncExtensions/blob/master/src/Agents/BlockingQueueAgent.fs
我有以下代码。但是,该计划永远不会结束。如何在消费者中退出循环?
let producer() =
let addLinks = async {
for url in links do
do! ag.AsyncAdd(Some (url))
printfn "Producing %s" url }
async { do! addLinks
do! ag.AsyncAdd(None) }
let consumer() = async {
while true do
let! item = ag.AsyncGet()
match item with
| Some (url) ->
printfn "Consuming %s" url
....
| None ->
printfn "Done" } // How to exit the loop from here?
producer() |> Async.Start
consumer() |> Async.RunSynchronously