You simply need to explicitly state that the class implements that interface. Don't rely on the fact that the base class implements it:
class AsyncObservableCollection<T> : ObservableCollection<T>, IEnumerable<T>
Having said that, as a matter of good design, I'd suggest not having the implicit interface implementation be so radically different from the other implementation. Instead you should have a method/property to get the "other" version, or possibly even both iterators, so that it is very clear for the caller when their iteration semantics are different. (On top of that, it lets users use either type of semantics with a foreach
loop, instead of manually iterating the iterator just to get different semantics.