Als Übung, um Akka zu lernen, versuche ich eine einfache Lösung für ein scheinbar einfaches Problem zu schreiben - wie effizient Verzeichnisse und Dateien in einem Startordner rekursiv aufzulisten.Auflisten von Dateien in Akka.net
Wenn ich Directory.GetDirectories verwende, wird dies ein blockierender Aufruf sein, der alle Verzeichnisse im Speicher liest. Das funktioniert gut, aber ich denke, es vereitelt den Zweck der Verwendung von Akka.
Jetzt, wenn ich Directory.EnumerateDirectories verwende, kann ich dann Tell an self für Verzeichnisse aufrufen oder Tell auf einem Dateihandler aufrufen, der zum Beispiel die Datei protokolliert.
Mein Problem ist, dass ich keine Möglichkeit habe zu wissen, wann der ganze Prozess fertig ist, das heißt, wenn mein Verzeichnis-Traversal beendet ist. Das Programm sitzt nur da und wartet auf etwas, das es herunterfährt.
Betrachte ich dieses Problem auf die falsche Art? Welche Möglichkeiten habe ich in Akka, um dieses Problem zu lösen?
EDIT: Hinzufügen Schauspieler Code
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);
}
}
}
}
könnten Sie Schauspieler-Code bereitstellen? – profesor79
@ profesor79 Sicher, hinzugefügt. Es ist ziemlich trivial, absichtlich. –