OperationResult
Represents an operation that runs asynchronously on a cloud service. Cloud
services use long-running operations to allow users to start an operation
with one request and then monitor progress of the operation until it has
completed. OperationResult enables waiting for completion of
long-running operations. Client libraries provide derived types that add
properties such as Value or Status as applicable
for a given service operation.
using System.ClientModel.Internal;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace System.ClientModel.Primitives
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
public abstract class OperationResult
{
private PipelineResponse _response;
public bool HasCompleted { get; set; }
[System.Runtime.CompilerServices.Nullable(2)]
public abstract ContinuationToken RehydrationToken {
[System.Runtime.CompilerServices.NullableContext(2)]
get;
[System.Runtime.CompilerServices.NullableContext(2)]
protected set;
}
protected OperationResult(PipelineResponse response)
{
_response = response;
}
[System.Runtime.CompilerServices.NullableContext(2)]
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
0,
1
})]
public abstract ValueTask<ClientResult> UpdateStatusAsync(RequestOptions options = null);
public abstract ClientResult UpdateStatus([System.Runtime.CompilerServices.Nullable(2)] RequestOptions options = null);
[AsyncStateMachine(typeof(<WaitForCompletionAsync>d__11))]
public virtual ValueTask WaitForCompletionAsync(CancellationToken cancellationToken = default(CancellationToken))
{
<WaitForCompletionAsync>d__11 stateMachine = default(<WaitForCompletionAsync>d__11);
stateMachine.<>t__builder = AsyncValueTaskMethodBuilder.Create();
stateMachine.<>4__this = this;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
public virtual void WaitForCompletion(CancellationToken cancellationToken = default(CancellationToken))
{
PollingInterval pollingInterval = new PollingInterval(null);
while (!HasCompleted) {
PipelineResponse rawResponse = GetRawResponse();
pollingInterval.Wait(rawResponse, cancellationToken);
RequestOptions options = RequestOptions.FromCancellationToken(cancellationToken);
ClientResult clientResult = UpdateStatus(options);
SetRawResponse(clientResult.GetRawResponse());
}
}
public PipelineResponse GetRawResponse()
{
return _response;
}
protected void SetRawResponse(PipelineResponse response)
{
Argument.AssertNotNull(response, "response");
_response = response;
}
}
}