public override long Seek()

in AdlsDotNetSDK/FileTransfer/RandomDataStream.cs [126:159]


        public override long Seek(long offset, SeekOrigin origin)
        {
            long newCursor = cursor;

            if (origin == SeekOrigin.Begin)
            {
                newCursor = offset % size;
                if (newCursor > streamLength - 1) newCursor = streamLength - 1;
                Interlocked.Exchange(ref cursor, newCursor);
            }

            if (origin == SeekOrigin.Current)
            {
                //Do this: cursor = cursor+offset;
                long tCursor;
                do
                {
                    tCursor = Interlocked.Read(ref cursor);
                    long tOffset = offset;
                    if (tCursor + tOffset >= streamLength) tOffset = (streamLength - 1) - tCursor;
                    newCursor = tCursor + tOffset;
                } while (Interlocked.CompareExchange(ref cursor, newCursor, tCursor) != tCursor);
            }

            if (origin == SeekOrigin.End)
            {
                if (offset <= 0 && streamLength != -1 && (-offset < streamLength))
                {
                    newCursor = streamLength + offset;
                    Interlocked.Exchange(ref cursor, newCursor);
                }
            }
            return newCursor;
        }