Takhle to rozhodně funkční nenapíšete. Budete potřebovat nastudovat si programování ve vícevláknovém prostředí – to zdaleka není jenom otázka „jak velké části kódu zamykat“. Navíc konkurenční přístup se dost těžko testuje – při běžných testech na chyby nepřijdete, protože k chybám dochází náhodně. Můžete otestovat některé konkrétní případy souběhu, ale to musíte předem vědět, kde problém může nastat – jenže napsat takový test je složitější, než napsat správně ten samotný konkurenční kód, a navíc tím otestujete jenom pár vybraných případů.
Co vám zaručuje ConcurrentDictionary byste se měl dozvědět v dokumentaci. Vám ale asi nebude stačit, abyste měl konkurenčně bezpečný slovník – když si dvě různá vlákna vytáhnou ze slovníku bezpečně tu stejnou session, je to sice dobré, ale ta vlákna s tou session pak dál musí vícevláknově bezpečně pracovat.
Zamyká se vždy co nejmenší část kódu, kterou je nutné zamknout, a zamyká se tím nejméně agresivním způsobem – tj. pokud třeba ze slovníku může číst více vláken najednou, a pouze zápis musí mít exkluzivní přístup (nesmí číst ani zapisovat nikdo jiný), zamykají se čtecí části nevýlučným zámkem pro čtení a pouze zapisující části se zamykají výlučným zámkem pro zápis. Zároveň při zamykání musíte dávat pozor na uvolňování zámků (aby se uvolnily i v případě selhání operací prováděných pod zámkem). Zkrátka je toho potřeba znát mnohem víc, než jenom „jak velký kus kódu zamknout“.