/// <summary> /// Exits the current no GC region. /// </summary> /// <exception cref="InvalidOperationException">If the GC is not in a no GC region</exception> /// <exception cref="InvalidOperationException">If the no GC region was exited due to an induced GC</exception> /// <exception cref="InvalidOperationException">If the no GC region was exited due to memory allocations /// exceeding the amount given to <see cref="TryStartNoGCRegion(long)"/></exception> public static void EndNoGCRegion() { EndNoGCRegionStatus status = (EndNoGCRegionStatus)RuntimeImports.RhEndNoGCRegion(); if (status == EndNoGCRegionStatus.NotInProgress) { throw new InvalidOperationException( SR.InvalidOperationException_NoGCRegionNotInProgress); } else if (status == EndNoGCRegionStatus.GCInduced) { throw new InvalidOperationException( SR.InvalidOperationException_NoGCRegionInduced); } else if (status == EndNoGCRegionStatus.AllocationExceeded) { throw new InvalidOperationException( SR.InvalidOperationException_NoGCRegionAllocationExceeded); } }