Ich habe eine Warteschlange, die Objekte in einer while-Schleife verarbeitet. Sie werden asynchron irgendwo hinzugefügt .. wie folgt aus:Entwurfsmuster für dynamisches C# -Objekt
myqueue.pushback(String value);
Und sie werden wie folgt verarbeitet:
while(true)
{
String path = queue.pop();
if(process(path))
{
Console.WriteLine("Good!");
}
else
{
queue.pushback(path);
}
}
Nun, die Sache ist, dass ich das ändern möchte einen TTL-like zu unterstützen (time to live), so dass der Dateipfad mehr als n mal hinzugefügt wird.
Wie könnte ich dies tun, während die Funktion Signatur beibehalten? Ich möchte das nicht ändern.
Ich dachte über das Halten einer Karte oder einer Liste, die zählt, wie oft die Prozessfunktion für einen Pfad false zurückgab und den Pfad von der Liste bei der n-ten Rückgabe von false löschte. Ich frage mich, wie dies dynamischer durchgeführt werden kann, und vorzugsweise möchte ich, dass sich die TTL automatisch bei jeder neuen Erweiterung des Prozesses dekrementiert. Ich hoffe, ich spreche nicht Müll. Vielleicht so etwas wie dieses
class JobData
{
public string path;
public short ttl;
public static implicit operator String(JobData jobData) {jobData.ttl--; return jobData.path;}
}
Was denken Sie, ist falsch mit Ihrem 'JobData' Ansatz? –
Gut ist die Sache, dass ich nicht die Prozessfunktion ändern möchte, ich will nur 'JobData' Objekt, das eine implizite Umwandlung in String in C# machen kann und einige Ideen über dynamisch und implizit dekrementieren den Tll-Wert – AlexandruC
Eine mögliche zusätzliche Die Lösung, die ich erwähnen, aber nicht befürworten werde, ist das Hinzufügen einer Erweiterungsmethode zum String-Typ mit Ihrem TTL-Zähler. Nicht ideal oder empfohlen, weil es eine sinnlose Methode zum Stringen überall hinzufügt (sogar begrenzt auf einen sehr lokalen Namensraum), aber es würde Ihr spezifisches Problem lösen. –