PageBlobWriteStream
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;
using Azure.Storage.Shared;
using System;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace Azure.Storage.Blobs
{
internal class PageBlobWriteStream : StorageWriteStream
{
private readonly PageBlobClient _pageBlobClient;
private readonly PageBlobRequestConditions _conditions;
private long _writeIndex;
public PageBlobWriteStream(PageBlobClient pageBlobClient, long bufferSize, long position, PageBlobRequestConditions conditions, IProgress<long> progressHandler, UploadTransferValidationOptions transferValidation)
: base(position, bufferSize, progressHandler, transferValidation, null, null)
{
ValidateBufferSize(bufferSize);
ValidatePosition(position);
_pageBlobClient = pageBlobClient;
_conditions = (conditions ?? new PageBlobRequestConditions());
_writeIndex = position;
}
[AsyncStateMachine(typeof(<AppendInternal>d__4))]
protected override Task AppendInternal(UploadTransferValidationOptions validationOptions, bool async, CancellationToken cancellationToken)
{
<AppendInternal>d__4 stateMachine = default(<AppendInternal>d__4);
stateMachine.<>t__builder = AsyncTaskMethodBuilder.Create();
stateMachine.<>4__this = this;
stateMachine.validationOptions = validationOptions;
stateMachine.async = async;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
protected override void ValidateBufferSize(long bufferSize)
{
if (bufferSize < 1)
throw new ArgumentOutOfRangeException("bufferSize", "Must be greater than or equal to 1");
DefaultInterpolatedStringHandler defaultInterpolatedStringHandler;
if (bufferSize > 4194304) {
defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(27, 1);
defaultInterpolatedStringHandler.AppendLiteral("Must less than or equal to ");
defaultInterpolatedStringHandler.AppendFormatted(4194304);
throw new ArgumentOutOfRangeException("bufferSize", defaultInterpolatedStringHandler.ToStringAndClear());
}
if (bufferSize % 512 != 0) {
defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(22, 1);
defaultInterpolatedStringHandler.AppendLiteral("Must be a multiple of ");
defaultInterpolatedStringHandler.AppendFormatted(512);
throw new ArgumentOutOfRangeException("bufferSize", defaultInterpolatedStringHandler.ToStringAndClear());
}
}
private static void ValidatePosition(long position)
{
if (position % 512 != 0) {
DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(22, 1);
defaultInterpolatedStringHandler.AppendLiteral("Must be a multiple of ");
defaultInterpolatedStringHandler.AppendFormatted(512);
throw new ArgumentOutOfRangeException("position", defaultInterpolatedStringHandler.ToStringAndClear());
}
}
}
}