public virtual Response <T> WaitForCompletion <T>(UpdateStatus updateStatus, HasCompleted hasCompleted, Value <T> value, GetRawResponse getRawResponse, TimeSpan?suggestedInterval, CancellationToken cancellationToken) { while (true) { Response response = updateStatus(cancellationToken); if (hasCompleted()) { return(Response.FromValue(value(), getRawResponse())); } Thread.Sleep(_delayStrategy.GetNextDelay(response, suggestedInterval)); } }
/// <summary> /// Attaches conditions to the class for checking whether it has completed /// </summary> /// <param name="func"></param> public void AttachCondition(HasCompleted func) { hasCompleted = func; }
public void AndThenTheResultIsReturnedOk() { Result.Should().Be(42); HasCompleted.Should().BeTrue(); }
public void AndThenTheResultIsNotReturned() { Result.Should().Be(0); HasCompleted.Should().BeFalse(); }
public virtual async ValueTask <Response <T> > WaitForCompletionAsync <T>(UpdateStatusAsync updateStatusAsync, HasCompleted hasCompleted, Value <T> value, GetRawResponse getRawResponse, TimeSpan?suggestedInterval, CancellationToken cancellationToken) { while (true) { Response response = await updateStatusAsync(cancellationToken).ConfigureAwait(false); if (hasCompleted()) { return(Response.FromValue(value(), getRawResponse())); } await Task.Delay(_delayStrategy.GetNextDelay(response, suggestedInterval), cancellationToken).ConfigureAwait(false); } }