public static TInterface GetOrAttachObjectRef <TInterface>(this IObjectRefContainer container, object key, Func <TInterface> valueFactory) where TInterface : class, IObjectRef { int num = 0; while (num < 100) { IObjectRef ref2; bool? nullable = container.TryGetAttachedObjectRef(key, typeof(TInterface), out ref2); if (nullable.GetValueOrDefault()) { return((TInterface)ref2); } if (!nullable.HasValue) { throw new InterfaceNotSupportedException(typeof(TInterface)); } TInterface objectRef = valueFactory(); if (container.TryAttachObjectRef(key, objectRef)) { return(objectRef); } objectRef.Dispose(); objectRef = default(TInterface); num++; Thread.Sleep(1); } throw new InternalErrorException(); }