Operation
Represents a long-running operation.
            
                using Azure.Core;
using Azure.Core.Pipeline;
using System;
using System.ClientModel.Primitives;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace Azure
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(0)]
    public abstract class Operation
    {
        public abstract string Id { get; }
        public abstract bool HasCompleted { get; }
        public static Operation<T> Rehydrate<[System.Runtime.CompilerServices.Nullable(0)] [DynamicallyAccessedMembers((DynamicallyAccessedMemberTypes)7)] T>(HttpPipeline pipeline, RehydrationToken rehydrationToken, [System.Runtime.CompilerServices.Nullable(2)] ClientOptions options = null) where T : IPersistableModel<T>
        {
            Argument.AssertNotNull(pipeline, "pipeline");
            Argument.AssertNotNull(rehydrationToken, "rehydrationToken");
            GenericOperationSource<T> operationSource = new GenericOperationSource<T>();
            NextLinkOperationImplementation nextLinkOperationImplementation = (NextLinkOperationImplementation)NextLinkOperationImplementation.Create(pipeline, rehydrationToken);
            IOperation<T> operation = NextLinkOperationImplementation.Create(operationSource, nextLinkOperationImplementation);
            OperationState<T> operationState = operation.UpdateStateAsync(false, default(CancellationToken)).EnsureCompleted();
            return new RehydrationOperation<T>(nextLinkOperationImplementation, operationState, operation, options);
        }
        public static Operation Rehydrate(HttpPipeline pipeline, RehydrationToken rehydrationToken, [System.Runtime.CompilerServices.Nullable(2)] ClientOptions options = null)
        {
            Argument.AssertNotNull(pipeline, "pipeline");
            Argument.AssertNotNull(rehydrationToken, "rehydrationToken");
            NextLinkOperationImplementation obj = (NextLinkOperationImplementation)NextLinkOperationImplementation.Create(pipeline, rehydrationToken);
            OperationState operationState = obj.UpdateStateAsync(false, default(CancellationToken)).EnsureCompleted();
            return new RehydrationOperation(obj, operationState, null);
        }
        [AsyncStateMachine(typeof(<RehydrateAsync>d__2<>))]
        public static Task<Operation<T>> RehydrateAsync<[System.Runtime.CompilerServices.Nullable(0)] [DynamicallyAccessedMembers((DynamicallyAccessedMemberTypes)7)] T>(HttpPipeline pipeline, RehydrationToken rehydrationToken, [System.Runtime.CompilerServices.Nullable(2)] ClientOptions options = null) where T : IPersistableModel<T>
        {
            <RehydrateAsync>d__2<T> stateMachine = default(<RehydrateAsync>d__2<T>);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<Operation<T>>.Create();
            stateMachine.pipeline = pipeline;
            stateMachine.rehydrationToken = rehydrationToken;
            stateMachine.options = options;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        [AsyncStateMachine(typeof(<RehydrateAsync>d__3))]
        public static Task<Operation> RehydrateAsync(HttpPipeline pipeline, RehydrationToken rehydrationToken, [System.Runtime.CompilerServices.Nullable(2)] ClientOptions options = null)
        {
            <RehydrateAsync>d__3 stateMachine = default(<RehydrateAsync>d__3);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<Operation>.Create();
            stateMachine.pipeline = pipeline;
            stateMachine.rehydrationToken = rehydrationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        public virtual RehydrationToken? GetRehydrationToken()
        {
            return null;
        }
        public abstract Response GetRawResponse();
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            0,
            1
        })]
        public abstract ValueTask<Response> UpdateStatusAsync(CancellationToken cancellationToken = default(CancellationToken));
        public abstract Response UpdateStatus(CancellationToken cancellationToken = default(CancellationToken));
        [AsyncStateMachine(typeof(<WaitForCompletionResponseAsync>d__12))]
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            0,
            1
        })]
        public virtual ValueTask<Response> WaitForCompletionResponseAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            <WaitForCompletionResponseAsync>d__12 stateMachine = default(<WaitForCompletionResponseAsync>d__12);
            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(<WaitForCompletionResponseAsync>d__13))]
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            0,
            1
        })]
        public virtual ValueTask<Response> WaitForCompletionResponseAsync(TimeSpan pollingInterval, CancellationToken cancellationToken = default(CancellationToken))
        {
            <WaitForCompletionResponseAsync>d__13 stateMachine = default(<WaitForCompletionResponseAsync>d__13);
            stateMachine.<>t__builder = AsyncValueTaskMethodBuilder<Response>.Create();
            stateMachine.<>4__this = this;
            stateMachine.pollingInterval = pollingInterval;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        [AsyncStateMachine(typeof(<WaitForCompletionResponseAsync>d__14))]
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            0,
            1
        })]
        public virtual ValueTask<Response> WaitForCompletionResponseAsync(DelayStrategy delayStrategy, CancellationToken cancellationToken = default(CancellationToken))
        {
            <WaitForCompletionResponseAsync>d__14 stateMachine = default(<WaitForCompletionResponseAsync>d__14);
            stateMachine.<>t__builder = AsyncValueTaskMethodBuilder<Response>.Create();
            stateMachine.<>4__this = this;
            stateMachine.delayStrategy = delayStrategy;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        public virtual Response WaitForCompletionResponse(CancellationToken cancellationToken = default(CancellationToken))
        {
            return new OperationPoller(null).WaitForCompletionResponse(this, null, cancellationToken);
        }
        public virtual Response WaitForCompletionResponse(TimeSpan pollingInterval, CancellationToken cancellationToken = default(CancellationToken))
        {
            return new OperationPoller(null).WaitForCompletionResponse(this, pollingInterval, cancellationToken);
        }
        public virtual Response WaitForCompletionResponse(DelayStrategy delayStrategy, CancellationToken cancellationToken = default(CancellationToken))
        {
            return new OperationPoller(delayStrategy).WaitForCompletionResponse(this, null, cancellationToken);
        }
        internal static T GetValue<T>([System.Runtime.CompilerServices.Nullable(2)] ref T value) where T : class
        {
            if (value == null)
                throw new InvalidOperationException("The operation has not completed yet.");
            return value;
        }
        [System.Runtime.CompilerServices.NullableContext(0)]
        internal static T GetValue<T>(ref T? value) where T : struct
        {
            if (!value.HasValue)
                throw new InvalidOperationException("The operation has not completed yet.");
            return value.Value;
        }
        [System.Runtime.CompilerServices.NullableContext(2)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }
        [EditorBrowsable(EditorBrowsableState.Never)]
        public override int GetHashCode()
        {
            return base.GetHashCode();
        }
        [System.Runtime.CompilerServices.NullableContext(2)]
        [EditorBrowsable(EditorBrowsableState.Never)]
        public override string ToString()
        {
            return base.ToString();
        }
    }
}