Akkaを学ぶための練習として、簡単な問題の簡単な解決策、つまり開始フォルダの下にディレクトリとファイルを効率的に再帰的にリストする方法を書いています。Akka.netのファイルを列挙する
私がDirectory.GetDirectoriesを使用すると、メモリ内のすべてのディレクトリを読み取るブロッキング呼び出しになります。これはうまくいきますが、私はAkkaを使う目的を打ち破ったと思います。
ここでDirectory.EnumerateDirectoriesを使用すると、ディレクトリのために自己にTellを呼び出すことができます。たとえば、ファイルハンドラでTellを呼び出すと、ファイルをログに記録できます。
私の問題は、プロセス全体がいつ完了したか、つまりディレクトリのトラバーサルが完了したことを知る方法がないことです。プログラムはそこに座って、何かをシャットダウンするのを待っています。
私はこの問題を間違った方法で見ていますか?この問題を解決するためにAkkaにはどのようなオプションがありますか?
EDIT:俳優コード
public class DirectoryActor : UntypedActor
{
private readonly IActorRef fileActor;
private readonly string initialPath;
public DirectoryActor(IActorRef fileActor, string initialPath)
{
this.fileActor = fileActor;
this.initialPath = initialPath;
}
protected override void OnReceive(object message)
{
foreach (string dir in Directory.EnumerateDirectories(message.ToString()))
{
Self.Tell(dir);
foreach (string file in Directory.EnumerateFiles(dir))
{
this.fileActor.Tell(file);
}
}
}
}
俳優コードを提供できますか? – profesor79
@ profesor79確かに、追加されました。それは目的にかなうはかなり簡単です。 –