Cache Generalizado com Prioridade e Tempo de Vida

C# Hard generics

Tarefa «Cache Generalizado com Prioridade e Tempo de Vida»

Implemente uma classe genérica Cache<TKey, TValue>, que armazena itens com um determinado tempo de vida (TimeToLive) e prioridade (int). Ao adicionar um item, se o cache exceder o tamanho máximo, o item com a menor prioridade é removido e, em caso de prioridade igual, o mais antigo. Após o TimeToLive, o item é considerado expirado e não é retornado na consulta. Métodos: Add(TKey key, TValue value, int priority) — adiciona ou atualiza um item; TryGet(TKey key, out TValue value) — retorna true se a chave existir e não estiver expirada, caso contrário false; RemoveExpired() — remove todos os itens expirados. Implemente segurança de threads usando locks.

Formato de Entrada

Primeira linha: tamanho máximo do cache (int) e tempo de vida em segundos (int). Segunda linha: número de comandos N (int). Em seguida, N linhas, cada comando: 'add chave valor prioridade' ou 'get chave' ou 'remove_expired'.

Formato de Saída

Para cada comando 'get', imprima o valor se a chave for encontrada e não estiver expirada, caso contrário 'null'. Para 'remove_expired', imprima o número de itens removidos. Para 'add', não imprima nada.

Exemplos

Exemplo 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
SAÍDA
10 null 40 1

Exemplo 2

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