Caché generalizado con prioridad y tiempo de vida

C# Hard generics

Tarea «Caché generalizado con prioridad y tiempo de vida»

Implemente una clase genérica Cache<TKey, TValue>, que almacena elementos con un tiempo de vida (TimeToLive) y una prioridad (int) determinados. Al agregar un elemento, si el caché supera el tamaño máximo, se elimina el elemento con la prioridad más baja, y en caso de igual prioridad, el más antiguo. Al expirar el TimeToLive, el elemento se considera caducado y no se devuelve al solicitarlo. Métodos: Add(TKey key, TValue value, int priority) — agrega o actualiza un elemento; TryGet(TKey key, out TValue value) — devuelve true si la clave existe y no ha caducado, de lo contrario false; RemoveExpired() — elimina todos los elementos caducados. Implemente la seguridad para subprocesos mediante bloqueos.

Formato de entrada

Primera línea: tamaño máximo del caché (int) y tiempo de vida en segundos (int). Segunda línea: cantidad de comandos N (int). Luego N líneas, cada comando: 'add clave valor prioridad' o 'get clave' o 'remove_expired'.

Formato de salida

Para cada comando 'get', muestre el valor si la clave se encuentra y no ha caducado, de lo contrario 'null'. Para 'remove_expired', muestre la cantidad de elementos eliminados. Para 'add', no muestre nada.

Ejemplos

Ejemplo 1

ENTRADA
3 5 8 add a 10 1 add b 20 2 get a add c 30 3 add d 40 1 get b get d remove_expired
SALIDA
10 null 40 1

Ejemplo 2

ENTRADA
2 10 6 add x 100 5 add y 200 5 get x add z 300 5 get y get z
SALIDA
100 null 300
main.cs