http://fssnip.net/3Kのコードを使用してコンソール プログラムを作成しました。そして、私はそれを見つけました
最後に「System.Console.ReadLine() |> ignore」を追加して、スレッドの終了を待ちます。すべての MailBoxProcessors が完了し、プログラムが終了できることを確認できますか?
テストURL「www.google.com」を無効なURLに変更しようとしたところ、次の出力が得られました。「出力競争」を回避することはできますか?
http://www.google.co1m がエージェント 1 によってクロールされました。 AgAAAent gent 3 が完了しました。 gent 2 が完了しました。 5 完了です。 ジェント4が完成しました。 エージェント USupervisor RL コレクターが完了しました。 終わらせる。 1が完了しました。
[編集]
Tomas の更新http://fssnip.net/65を使用した後も、最後の出力/クロールは終了します。以下は、「制限」を 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"
ただし、最後に Console.Readline() を追加しない限り、最後のprintfn "[Main] after crawl"は実行されません。
[編集2]
コードは fsi の下で問題なく動作します。ただし、 fsi --use:Program.fs --exec --quiet を使用して実行した場合、同じ問題が発生します。