Пример #1
0
        private async Task <bool> ExecuteLazyOperationsSingleStep(ResponseTimeInformation responseTimeInformation)
        {
            var disposables = pendingLazyOperations.Select(x => x.EnterContext()).Where(x => x != null).ToList();

            try
            {
                var requests  = pendingLazyOperations.Select(x => x.CreateRequest()).ToArray();
                var responses = await AsyncDatabaseCommands.MultiGetAsync(requests);

                for (int i = 0; i < pendingLazyOperations.Count; i++)
                {
                    long totalTime;
                    long.TryParse(responses[i].Headers["Temp-Request-Time"], out totalTime);

                    responseTimeInformation.DurationBreakdown.Add(new ResponseTimeItem
                    {
                        Url      = requests[i].UrlAndQuery,
                        Duration = TimeSpan.FromMilliseconds(totalTime)
                    });
                    if (responses[i].RequestHasErrors())
                    {
                        throw new InvalidOperationException("Got an error from server, status code: " + responses[i].Status +
                                                            Environment.NewLine + responses[i].Result);
                    }
                    pendingLazyOperations[i].HandleResponse(responses[i]);
                    if (pendingLazyOperations[i].RequiresRetry)
                    {
                        return(true);
                    }
                }
                return(false);
            }
            finally
            {
                foreach (var disposable in disposables)
                {
                    disposable.Dispose();
                }
            }
        }
Пример #2
0
 /// <summary>
 /// Begins the async multi load operation
 /// </summary>
 /// <param name="ids">The ids.</param>
 /// <returns></returns>
 public Task <T[]> MultiLoadAsync <T>(string[] ids)
 {
     IncrementRequestCount();
     return(AsyncDatabaseCommands.MultiGetAsync(ids)
            .ContinueWith(task => task.Result.Select(TrackEntity <T>).ToArray()));
 }