The ConcurrentDictionary
class itself is thread-safe.
That has nothing to do wit the thread-safety of whatever you put in the dictionary.
You should make sure that your classes are thread-safe, or, ideally, immutable.
If you do mutate objects in the dictionary, you must also be aware that a different thread might remove or replace it at any time.
In short, thread-safety is still hard; you still need to know exactly what might change and make sure that every thread can handle it.
For more information about writing thread-safe objects, see my blog.