public async Task <ResponseTimeInformation> ExecuteAllPendingLazyOperationsAsync(CancellationToken token = default(CancellationToken)) { if (PendingLazyOperations.Count == 0) { return(new ResponseTimeInformation()); } try { var sw = Stopwatch.StartNew(); IncrementRequestCount(); var responseTimeDuration = new ResponseTimeInformation(); while (await ExecuteLazyOperationsSingleStep(responseTimeDuration).WithCancellation(token).ConfigureAwait(false)) { await TimeoutManager.WaitFor(TimeSpan.FromMilliseconds(100), token).ConfigureAwait(false); } responseTimeDuration.ComputeServerTotal(); foreach (var pendingLazyOperation in PendingLazyOperations) { Action <object> value; if (OnEvaluateLazy.TryGetValue(pendingLazyOperation, out value)) { value(pendingLazyOperation.Result); } } responseTimeDuration.TotalClientDuration = sw.Elapsed; return(responseTimeDuration); } finally { PendingLazyOperations.Clear(); } }
private bool ExecuteLazyOperationsSingleStep(ResponseTimeInformation responseTimeInformation) { //WIP - Not final var requests = PendingLazyOperations.Select(x => x.CreateRequest(Context)).ToList(); var multiGetOperation = new MultiGetOperation(this); var multiGetCommand = multiGetOperation.CreateRequest(requests); RequestExecutor.Execute(multiGetCommand, Context, sessionInfo: SessionInfo); var responses = multiGetCommand.Result; for (var i = 0; i < PendingLazyOperations.Count; i++) { long totalTime; string tempReqTime; var response = responses[i]; response.Headers.TryGetValue(Constants.Headers.RequestTime, out tempReqTime); long.TryParse(tempReqTime, out totalTime); responseTimeInformation.DurationBreakdown.Add(new ResponseTimeItem { Url = requests[i].UrlAndQuery, Duration = TimeSpan.FromMilliseconds(totalTime) }); if (response.RequestHasErrors()) { throw new InvalidOperationException("Got an error from server, status code: " + (int)response.StatusCode + Environment.NewLine + response.Result); } PendingLazyOperations[i].HandleResponse(response); if (PendingLazyOperations[i].RequiresRetry) { return(true); } } return(false); }
public ResponseTimeInformation ExecuteAllPendingLazyOperations() { if (PendingLazyOperations.Count == 0) { return(new ResponseTimeInformation()); } try { var sw = Stopwatch.StartNew(); IncrementRequestCount(); var responseTimeDuration = new ResponseTimeInformation(); while (ExecuteLazyOperationsSingleStep(responseTimeDuration)) { Thread.Sleep(100); } responseTimeDuration.ComputeServerTotal(); foreach (var pendingLazyOperation in PendingLazyOperations) { Action <object> value; if (OnEvaluateLazy.TryGetValue(pendingLazyOperation, out value)) { value(pendingLazyOperation.Result); } } responseTimeDuration.TotalClientDuration = sw.Elapsed; return(responseTimeDuration); } finally { PendingLazyOperations.Clear(); } }
private async Task <bool> ExecuteLazyOperationsSingleStep(ResponseTimeInformation responseTimeInformation, List <GetRequest> requests, Stopwatch sw, CancellationToken token = default) { var multiGetOperation = new MultiGetOperation(this); var multiGetCommand = multiGetOperation.CreateRequest(requests); await RequestExecutor.ExecuteAsync(multiGetCommand, Context, sessionInfo : _sessionInfo, token : token).ConfigureAwait(false); var responses = multiGetCommand.Result; for (var i = 0; i < PendingLazyOperations.Count; i++) { var response = responses[i]; response.Headers.TryGetValue(Constants.Headers.RequestTime, out string tempReqTime); response.Elapsed = sw.Elapsed; long.TryParse(tempReqTime, out long totalTime); responseTimeInformation.DurationBreakdown.Add(new ResponseTimeItem { Url = requests[i].UrlAndQuery, Duration = TimeSpan.FromMilliseconds(totalTime) }); if (response.RequestHasErrors()) { throw new InvalidOperationException("Got an error from server, status code: " + (int)response.StatusCode + Environment.NewLine + response.Result); } PendingLazyOperations[i].HandleResponse(response); if (PendingLazyOperations[i].RequiresRetry) { return(true); } } return(false); }