internal void Complete()
{
FreeOverlapped(false);
// Mark as not in-use
Interlocked.Exchange(ref _operating, Free);
// Check for deferred Dispose().
// The deferred Dispose is not guaranteed if Dispose is called while an operation is in progress.
// The m_DisposeCalled variable is not managed in a thread-safe manner on purpose for performance.
if (_disposeCalled)
{
Dispose();
}
}