Not arguing performance, nowadays you can wrap a dict.TryAdd(foo, bar) followed by dict[foo] = bear in your AddOrUpdate extension.
dict.TryAdd(foo, bar)
dict[foo] = bear
AddOrUpdate