Extension methods to make ConcurrentDictionary GetOrAdd and AddOrUpdate thread safe when using valueFactory delegates
Allowing the caller to provide the type argument U implies that they are allowed to use a subclass of Lazy&lt;V&gt;, but this will not work as your implementations always creates a new List&lt;V&gt; and cast it to U. Since this means U must always be a Lazy&lt;V&gt; then why not do away with the extra type argument.

public static V GetOrAdd&lt;T, V&gt;(this ConcurrentDictionary&lt;T, Lazy&lt;V&gt;&gt; dictionary, T key, Func&lt;T, V&gt; valueFactory)

The name of the new extension methods conflict with the names of the existing methods. For the consumer to use yours instead of the existing methods, they would need to either access via your static class or use explicit type arguments. This could lead to subtle bugs when consumers try to use it as a extension method with type inference.

ExtensionHost.GetOrAdd(safeStore, 7, (i) =&gt; i.ToString());             // uses yours
safeStore.GetOrAdd&lt;int, Lazy&lt;string&gt;, string&gt;(6, (i) =&gt; i.ToString()); // uses yours
safeStore.GetOrAdd(5, (i) =&gt; i.ToString());                            // uses existing