Ho creato una piccola libreria denominata SignalR.EventAggregatorProxy
Prima di inserirlo nello stato 1.0, devo correggerlo in modo che funzioni in sicurezza con operazioni simultanee. Il modo più semplice è bloccare tutte le operazioni, ma questo è un enorme impatto sulle prestazioni.
La libreria mette in coda le sottoscrizioni degli eventi e quando arriva un evento controlla le sottoscrizioni e aggiorna i client utilizzando SignalR
Questa è la classe che contiene gli abbonamenti
Ci sono 3 metodi che scrivono / leggono alla / e collezione / e di sottoscrizione (io aggrego la sottoscrizione sia a livello di client che a livello di eventi, quindi le sue due raccolte)
- Iscriviti
- UnsubscribeConnection
- Cancella
E quello che legge
- Maniglia
Comprendo che questa è una libreria, non posso renderla ottimale per tutti gli utenti della libreria, ma come faccio a trovare una buona via di mezzo che non usi i blocchi?
Penso che il metodo Handle sia il metodo più importante e debba avere la priorità per le prestazioni rispetto agli altri 3.
Ho fatto questo piccolo Unittest per testare l'errore di concomitanza
Aggiornamento: Ho scelto di avere scritture bloccate e letture sbloccate. Le scritture non hanno modificato lo stato esistente ma sovrascrivono completamente la raccolta.