コード例 #1
0
        public async ValueTask <uint> GetNextPageNoToWriteAsync(int tocIndex, int dataSize)
        {
            var(position, length) = await GetPagePositionAllocationToc(tocIndex, false);

            if (length == 0)
            {
                return(await GetTheEndOfTheFileAsync());
            }

            var nowTakenPages = MyAzurePageBlobUtils.CalculateRequiredPagesAmount(length);

            var newSizePages = MyAzurePageBlobUtils.CalculateRequiredPagesAmount(dataSize);

            if (nowTakenPages >= newSizePages)
            {
                return(position);
            }

            return(await GetTheEndOfTheFileAsync());
        }
コード例 #2
0
        public async Task <CompressedPage> ReadAsync(MessagePageId pageId)
        {
            try
            {
                //If we do not have exceptions - can remove this try/catch
                GetPageTocIndex(pageId);
            }
            catch (Exception e)
            {
                Console.WriteLine("Can not get TocIndex for page: " + pageId.Value + "; TopicId:" + TopicId);
                Console.WriteLine(e);
                throw;
            }

            var tocIndex = GetPageTocIndex(pageId);

            var(position, length) = await GetPagePositionAllocationToc(tocIndex, false);

            if (length == 0)
            {
                return(CompressedPage.CreateEmpty(pageId));
            }

            try
            {
                //If we do not have exceptions - can remove this try/catch

                var fullPages = MyAzurePageBlobUtils.CalculateRequiredPagesAmount(length);

                var result = await AzurePageBlob.ReadAsync(position, fullPages);

                var buffer = result.GetBuffer();

                return(new CompressedPage(pageId, new ReadOnlyMemory <byte>(buffer, 0, (int)length)));
            }
            catch (Exception)
            {
                Console.WriteLine("Problem with reading page: " + pageId + " TocIndex: " + tocIndex + "; position:" + position + " Length:" + length);
                return(CompressedPage.CreateEmpty(pageId));
            }
        }