Akka'yı öğrenmek için yapılan bir alıştırma olarak, basit bir problem için basit bir çözüm yazmaya çalışıyorum - başlangıç klasörünün altındaki dizinleri ve dosyaları nasıl yinelemeli olarak listeleyebilirsiniz.Akka.net içindeki dosyaları numaralandırma
Directory.GetDirectories kullanırsam, tüm dizinleri bellekte okuyacak bir engelleme çağrısı olur. Bu iyi çalışıyor ama bence Akka kullanmanın amacını yener.
Eğer Directory.EnumerateDirectories'i kullanırsam, daha sonra dizinler için Kendime söyle'yi arayabilir veya örneğin dosyayı günlüğe kaydedecek bir Dosya işleyicisinde söyle'yi çağırabilirim.
Sorunum, tüm işlemin ne zaman yapıldığını bilmem, yani dizin geçişim bittiğinde. Program sadece orada oturur ve onu kapatmak için bir şeyler bekler.
Bu soruna yanlış şekilde mi bakıyordum? Bu sorunu çözmek için Akka'da ne gibi seçeneklerim var?
DÜZENLEME: - o zaman alınan ve taranan dizinlerin her amout karşılaştırabilirsiniz - Görev bittiğinde bu yüzden bildiğimiz biz bir çıkış deyimi belirtmek gerekiyor gibi ekle aktör kodu
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);
}
}
}
}
Oyuncu kodu verebilir misiniz? – profesor79
@ profesor79 Elbette, eklendi. Amaca göre oldukça önemsiz. –