コード例 #1
0
        private Task <QueryResult> GetQueryResultTaskResult(string query, IndexQuery indexQuery, DateTime startTime)
        {
            return(theAsyncDatabaseCommands.QueryAsync(indexName, indexQuery, includes.ToArray())
                   .ContinueWith(task =>
            {
                if (theWaitForNonStaleResults && task.Result.IsStale)
                {
                    var elapsed1 = DateTime.Now - startTime;
                    if (elapsed1 > timeout)
                    {
                        throw new TimeoutException(
                            string.Format("Waited for {0:#,#}ms for the query to return non stale result.",
                                          elapsed1.TotalMilliseconds));
                    }
                    Debug.WriteLine(
                        string.Format(
                            "Stale query results on non stable query '{0}' on index '{1}' in '{2}', query will be retried",
                            query, indexName, theSession.StoreIdentifier));


                    return TaskEx.Delay(100)
                    .ContinueWith(_ => GetQueryResultTaskResult(query, indexQuery, startTime))
                    .Unwrap();
                }

                Debug.WriteLine(string.Format("Query returned {0}/{1} results", task.Result.Results.Count,
                                              task.Result.TotalResults));
                return task;
            }).Unwrap());
        }