CopyFromUriOperation
An  Operation<T> for tracking the status of a
             StartCopyFromUriAsync
            request.  Its  Value upon successful
            completion will be the number of bytes copied.
            
                using Azure.Core;
using Azure.Core.Pipeline;
using Azure.Storage.Blobs.Specialized;
using System;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace Azure.Storage.Blobs.Models
{
    public class CopyFromUriOperation
    {
        private readonly BlobBaseClient _client;
        private readonly CancellationToken _cancellationToken;
        private bool _hasCompleted;
        private long? _value;
        private Response _rawResponse;
        public override bool HasCompleted => _hasCompleted;
        public override bool HasValue => _value.HasValue;
        public override string Id { get; }
        public override long Value => OperationHelpers.GetValue(ref _value);
        public override Response GetRawResponse()
        {
            return _rawResponse;
        }
        public override ValueTask<Response<long>> WaitForCompletionAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            return this.DefaultWaitForCompletionAsync<long>(cancellationToken);
        }
        public override ValueTask<Response<long>> WaitForCompletionAsync(TimeSpan pollingInterval, CancellationToken cancellationToken)
        {
            return this.DefaultWaitForCompletionAsync<long>(pollingInterval, cancellationToken);
        }
        protected CopyFromUriOperation()
        {
        }
        public CopyFromUriOperation(string id, BlobBaseClient client)
            : this(client, id, null, CancellationToken.None)
        {
        }
        internal CopyFromUriOperation(BlobBaseClient client, string copyId, Response initialResponse, CancellationToken cancellationToken)
        {
            Id = copyId;
            _value = null;
            _rawResponse = initialResponse;
            _client = client;
            _cancellationToken = cancellationToken;
        }
        public override Response UpdateStatus(CancellationToken cancellationToken = default(CancellationToken))
        {
            return UpdateStatusAsync(false, cancellationToken).EnsureCompleted();
        }
        [AsyncStateMachine(typeof(<UpdateStatusAsync>d__21))]
        public override ValueTask<Response> UpdateStatusAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            <UpdateStatusAsync>d__21 stateMachine = default(<UpdateStatusAsync>d__21);
            stateMachine.<>t__builder = AsyncValueTaskMethodBuilder<Response>.Create();
            stateMachine.<>4__this = this;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        [AsyncStateMachine(typeof(<UpdateStatusAsync>d__22))]
        private Task<Response> UpdateStatusAsync(bool async, CancellationToken cancellationToken)
        {
            <UpdateStatusAsync>d__22 stateMachine = default(<UpdateStatusAsync>d__22);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<Response>.Create();
            stateMachine.<>4__this = this;
            stateMachine.async = async;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
    }
}