public SubDomainZone GetOrAddParentSideZone(Func <SubDomainZone> valueFactory) { SubDomainZone newParentSideZone = null; while (true) { SubDomainZone parentSideZone = _parentSideZone; if (parentSideZone is not null) { return(parentSideZone); } if (newParentSideZone is null) { newParentSideZone = valueFactory(); } if (TryAdd(newParentSideZone)) { return(newParentSideZone); } } }
public bool TryAdd(SubDomainZone parentSideZone) { return(Interlocked.CompareExchange(ref _parentSideZone, parentSideZone, null) is null); }
public bool TryRemove(out SubDomainZone parentSideZone) { parentSideZone = _parentSideZone; return(ReferenceEquals(Interlocked.CompareExchange(ref _parentSideZone, null, parentSideZone), parentSideZone)); }
public AuthZoneNode(SubDomainZone parentSideZone, ApexZone zone) { _parentSideZone = parentSideZone; _apexZone = zone; }