Mam kolejkę, która przetwarza obiekty w pętli while. Dodaje się je asynchronicznie gdzieś .. tak:Wzór dla dynamicznego obiektu C#
myqueue.pushback(String value);
I są one przetwarzane tak:
while(true)
{
String path = queue.pop();
if(process(path))
{
Console.WriteLine("Good!");
}
else
{
queue.pushback(path);
}
}
Teraz chodzi o to, że chciałbym, aby zmodyfikować ten wspierać TTL-like (czas życia), więc ścieżka pliku zostanie dodana o więcej niż n razy.
Jak mogę to zrobić, zachowując podpis funkcji bool process(String path)
? Nie chcę tego modyfikować.
Pomyślałem o trzymaniu mapy lub listy, która policzy ile razy funkcja procesu zwróciła false dla ścieżki i upuściła ścieżkę z listy na n-ty zwrot fałszu. Zastanawiam się, jak można to zrobić bardziej dynamicznie, a najlepiej, aby TTL automatycznie zmniejszał się przy każdym nowym dodaniu do procesu. Mam nadzieję, że nie gadam. Może użyciu coś jak ten
class JobData
{
public string path;
public short ttl;
public static implicit operator String(JobData jobData) {jobData.ttl--; return jobData.path;}
}
Co sądzisz nie tak z twoim podejściem "JobData"? –
Chodzi o to, że nie chcę modyfikować funkcji procesu, po prostu chcę obiektu "JobData", który jest w stanie wykonać niejawną konwersję do String w języku C# i kilka pomysłów na temat dynamicznego i niejawnego zmniejszania wartości Tll. – AlexandruC
Możliwe dodatkowe rozwiązaniem, które wspomnę, ale nie polecę, jest dodanie metody rozszerzenia do typu String z licznikiem TTL. Nie jest to idealne rozwiązanie lub zalecane, ponieważ dodaje bezsensowną metodę do ciągów na całym świecie (nawet ograniczone do bardzo lokalnej przestrzeni nazw), ale rozwiązałoby to twój konkretny problem. –