Я создал консольную программу, используя код из http://fssnip.net/3K. И я обнаружил, что
Я бы добавил "System.Console.ReadLine () |> игнорировать "в конце ждать окончания потоков".Можно ли сказать, что все MailBoxProcessors завершены, и программа может выйти сама?
Я попытался изменить URL-адрес теста "www.google.com" на недействительный URL-адрес, и я получилследующий вывод.Можно ли избежать «гонки вывода»?
http://www.google.co1m crawled by agent 1.
AgAAAent gent 3 is done.
gent 2 is done.
5 is done.
gent 4 is done.
Agent USupervisor RL collector is done.
is done.
1 is done.
[Изменить]
Последний вывод / сканирование все еще прекращается после использования обновления Томаса http://fssnip.net/65. Ниже приведен вывод программы после того, как я изменил «limit» на 5 и добавил несколько сообщений отладки.Последняя строка показывает усеченный URL.Можно ли определить, все ли сканеры закончили выполнение?
[Main] before crawl
[Crawl] before return result
http://news.google.com crawled by agent 1.
[supervisor] reached limit
http://www.gstatic.com/news/img/favicon.ico crawled by agent 5.
Agent 2 is done.
[supervisor] reached limit
Agent 5 is done.
http://www.google.com/imghp?hl=en&tab=ni crawled by agent 3.
[supervisor] reached limit
Agent 3 is done.
http://www.google.com/webhp?hl=en&tab=nw crawled by agent 4.
[supervisor] reached limit
Agent 4 is done.
http://news.google.com/n
Я изменил основной код на
printfn "[Main] before crawl"
crawl "http://news.google.com" 5
|> Async.RunSynchronously
printfn "[Main] after crawl"
Однако последний printfn "[Main]после сканирования " никогда не выполняется, если я не добавляю Console.Readline () в конце.
[Редактировать 2]
Код работает нормально под fsi.Однако у него будет такая же проблема, если он был запущен с использованием fsi --use: Program.fs --exec --quiet